48 memset(mutex, 0,
sizeof(*mutex));
54 if(mutex->is_locked) {
55 if(!mutex->waiting_process && !mutex->has_more_waiting_processes) {
58 mutex->has_more_waiting_processes =
true;
59 mutex->waiting_process = PROCESS_BROADCAST;
63 mutex->is_locked =
true;
71 if(mutex->waiting_process || mutex->has_more_waiting_processes) {
72 process_post(mutex->waiting_process, PROCESS_EVENT_UNLOCKED, NULL);
73 mutex->has_more_waiting_processes =
false;
74 mutex->waiting_process = NULL;
76 mutex->is_locked =
false;
int process_post(struct process *p, process_event_t ev, process_data_t data)
Post an asynchronous event.
#define PROCESS_CURRENT()
Get a pointer to the currently running process.
void process_mutex_init(process_mutex_t *mutex)
Initializes a process mutex.
bool process_mutex_try_lock(process_mutex_t *mutex)
Tries to acquire a process mutex.
void process_mutex_unlock(process_mutex_t *mutex)
Unlocks a process mutex.
Header file for Process mutexes.
Structure of a process mutex.