Version 1 (modified by 6 years ago) (diff) | ,
---|
This section describes the ALMOS-MKH implementation of the POSIX compliant, user-level synchronisation services: mutex, condvar, barrier and semaphore.
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.