The synchronization object provides a kind of mutex and can be locked and unlocked to prevent critical sections of programs to be executed simultaneously. It also provides a kind of event (posix condition), threads can wait for to occur.
Events are another synchronization device. Threads can wait for an event or they can signal an event to wake up threads waiting for it. Events are implemented using posix events (see manpage 3 pthread_cond_init). Events are used together with mutexes to prevent race conditions. Before waiting for an event, the associated mutex must be locked. When the thread starts to wait for the event, the mutex is automatically unlocked. Before a wait returns the mutex is automatically locked again.
In Vimms all objects have an associated mutex that is locked before the object is executed. This ensures that no object is executed at the same time by more than one thread (except with some objects like the call and the thread-block object). This means if for example a var-bridge object is used by multiple threads to share data normally no additional mutex to prevent coinstantaneous access is required.