DRLVM has a complex system of locks used to synchronize multiple threads operation.
Thread primitives in DRLVM
Low-level primitives for use in C++ code
* Mutex: hymutex_create, hymutex_lock, hymutex_trylock, hymutex_unlock, hymutex_destroy
- Most of the internal DRLVM locks are mutexes
* Conditional variable: hycond_create, hycond_wait, hycond_wait_timed, hycond_wait_interruptable, hycond_notify, hycond_notify_all, hycond_destroy
- Conditional variables are used in pair with mutex. Most of the internal DRLVM events are implemented using conditional variables.
Higher-level synchronization objects
* Java monitors are accessible from C++ code using fucntions
jthread_monitor_init thread\src\thread_java_monitors.c jthread_monitor_enter thread\src\thread_java_monitors.c jthread_monitor_try_enter thread\src\thread_java_monitors.c jthread_monitor_exit thread\src\thread_java_monitors.c jthread_monitor_notify thread\src\thread_java_monitors.c jthread_monitor_notify_all thread\src\thread_java_monitors.c jthread_monitor_wait thread\src\thread_java_monitors.c jthread_monitor_timed_wait thread\src\thread_java_monitors.c jthread_monitor_init thread/src/thread_java_monitors.c jthread_monitor_enter thread/src/thread_java_monitors.c jthread_monitor_try_enter thread/src/thread_java_monitors.c jthread_monitor_exit thread/src/thread_java_monitors.c jthread_monitor_notify thread/src/thread_java_monitors.c jthread_monitor_notify_all thread/src/thread_java_monitors.c jthread_monitor_wait thread/src/thread_java_monitors.c jthread_monitor_timed_wait thread/src/thread_java_monitors.c
Topics to be covered by this page
- What synchronization objects should be used and when during DRLVM development
- The general locking rules ("locking protocol") in DRLVM
- the list of global locks
- the order of obtaining locks
- interaction with suspension
Some of the topics are already covered by http://harmony.apache.org/subcomponents/drlvm/TM.html