diff --git a/packages/events/event.go b/packages/events/event.go
index d35788bcf8a7e39054a22a223eb12226ed9cba66..ae8de77f9963fa8801919c21a257086c752dc566 100644
--- a/packages/events/event.go
+++ b/packages/events/event.go
@@ -1,19 +1,28 @@
 package events
 
+import "sync"
+
 type Event struct {
 	triggerFunc func(handler interface{}, params ...interface{})
 	callbacks   map[uintptr]interface{}
+	mutex       sync.RWMutex
 }
 
 func (this *Event) Attach(closure *Closure) {
+	this.mutex.Lock()
+	defer this.mutex.Unlock()
 	this.callbacks[closure.Id] = closure.Fnc
 }
 
 func (this *Event) Detach(closure *Closure) {
+	this.mutex.Lock()
+	defer this.mutex.Unlock()
 	delete(this.callbacks, closure.Id)
 }
 
 func (this *Event) Trigger(params ...interface{}) {
+	this.mutex.RLock()
+	defer this.mutex.RUnlock()
 	for _, handler := range this.callbacks {
 		this.triggerFunc(handler, params...)
 	}