Arax -8d09c51940345c86062e8ef2427c705ae66e5926
A Runtime Framework for Decoupling Applications from Heterogeneous Accelerators
Loading...
Searching...
No Matches
mutex/async.c
Go to the documentation of this file.
1#include "async.h"
2
5
8
10{
11 pthread_mutexattr_init(&(completion->attr));
12 pthread_mutexattr_setpshared(&(completion->attr), PTHREAD_PROCESS_SHARED);
13 pthread_mutex_init(&(completion->mutex), &(completion->attr));
14 pthread_mutex_lock(&(completion->mutex));
15}
16
18{
19 pthread_mutex_trylock(&(completion->mutex)); // Hack to avoid double unlocking
20 pthread_mutex_unlock(&(completion->mutex));
21}
22
24{
25 pthread_mutex_lock(&(completion->mutex));
26}
27
29{
30 int ret_val;
31
32 if (!(ret_val = pthread_mutex_trylock(&(completion->mutex))) )
33 pthread_mutex_unlock(&(completion->mutex));
34 return !ret_val;
35}
36
38{
39 sem_init(&(sem->sem), 1, 0);
40}
41
43{
44 int ret;
45
46 sem_getvalue(&(sem->sem), &ret);
47 return ret;
48}
49
51{
52 sem_post(&(sem->sem));
53}
54
56{
57 sem_wait(&(sem->sem));
58}
59
61{
62 async_completion_init(0, &(cond->mutex));
64 pthread_condattr_init(&(cond->c_attr));
65 pthread_condattr_setpshared(&(cond->c_attr), PTHREAD_PROCESS_SHARED);
66 pthread_cond_init(&(cond->condition), &(cond->c_attr));
67}
68
73
75{
76 pthread_cond_wait(&(cond->condition), &(cond->mutex.mutex));
77}
78
80{
81 pthread_cond_broadcast(&(cond->condition));
82}
83
88
90{ }
pthread_mutex_t mutex
pthread_mutexattr_t attr
pthread_cond_t condition
Definition mutex/async.h:30
async_completion_s mutex
pthread_condattr_t c_attr
Definition mutex/async.h:31
void async_semaphore_inc(async_semaphore_s *sem)
Definition mutex/async.c:50
void async_condition_wait(async_condition_s *cond)
Definition mutex/async.c:74
void async_semaphore_init(async_meta_s *meta, async_semaphore_s *sem)
Definition mutex/async.c:37
int async_semaphore_value(async_semaphore_s *sem)
Definition mutex/async.c:42
void async_condition_unlock(async_condition_s *cond)
Definition mutex/async.c:84
void async_condition_notify(async_condition_s *cond)
Definition mutex/async.c:79
void async_semaphore_dec(async_semaphore_s *sem)
Definition mutex/async.c:55
void async_meta_init_once(async_meta_s *meta, arch_alloc_s *alloc)
Definition mutex/async.c:3
void async_completion_init(async_meta_s *meta, async_completion_s *completion)
Definition mutex/async.c:9
void async_condition_init(async_meta_s *meta, async_condition_s *cond)
Definition mutex/async.c:60
void async_completion_complete(async_completion_s *completion)
Definition mutex/async.c:17
void async_meta_init_always(async_meta_s *meta)
Definition mutex/async.c:6
int async_completion_check(async_completion_s *completion)
Definition mutex/async.c:28
void async_completion_wait(async_completion_s *completion)
Definition mutex/async.c:23
void async_condition_lock(async_condition_s *cond)
Definition mutex/async.c:69
void async_meta_exit(async_meta_s *meta)
Definition mutex/async.c:89