This section describes the ALMOS-MKH implementation of the POSIX compliant, user-level synchronisation services: mutex, condvar, barrier and semaphore. [[PageOutline]] == A) General Principles == All data structure defined by ALMOS-MKH to support the user-level, POSIX compliant, synchronization services are fully specific, and do NOT use the kernel level synchronization primitives described in section. does NOT use the == B) Mutex == This file defines an user level POSIX compliant mutex. * * It can be used by muti-threaded user applications to synchronise user threads * running in different clusters. * * A mutex is declared by a given user process as a "pthread_mutex_t" global variable. * This user type is implemented as an unsigned long, but the value is not used by the * kernel. ALMOS-MKH uses only the mutex virtual address as an identifier. * For each user mutex, ALMOS-MKH creates a kernel "remote_mutex_t" structure, * dynamically allocated in the reference cluster by the remote_mutex_create() function, * and destroyed by the remote_mutex_destroy() function, using RPC if the calling thread * is not running in the reference cluster. * * The blocking "remote_mutex_lock()" function implements a descheduling policy when * the lock is already taken by another thread : the calling thread is registered * in a waiting queue, rooted in the mutex structure, and the the calling thread * is blocked on the THREAD_BLOCKED_MUTEX condition. * The "remote_mutex_unlock()" function unblocks the first waiting thread in the queue * without releasing the mutex if queue is not empty. == C) Condvar == == D) Semaphore == == E) Barrier ==