OpenMAX Bellagio 0.9.3
tsemaphore.c
Go to the documentation of this file.
1
27#include <pthread.h>
28#include <sys/time.h>
29#include <errno.h>
30#include "tsemaphore.h"
32
39OSCL_EXPORT_REF int tsem_init(tsem_t* tsem, unsigned int val) {
40 int i;
41 i = pthread_cond_init(&tsem->condition, NULL);
42 if (i!=0) {
43 return -1;
44 }
45 i = pthread_mutex_init(&tsem->mutex, NULL);
46 if (i!=0) {
47 return -1;
48 }
49 tsem->semval = val;
50 return 0;
51}
52
58 pthread_cond_destroy(&tsem->condition);
59 pthread_mutex_destroy(&tsem->mutex);
60}
61
69OSCL_EXPORT_REF int tsem_timed_down(tsem_t* tsem, unsigned int milliSecondsDelay) {
70 int err = 0;
71 struct timespec final_time;
72 struct timeval currentTime;
73 long int microdelay;
74
75 gettimeofday(&currentTime, NULL);
77 microdelay = ((milliSecondsDelay * 1000 + currentTime.tv_usec));
78 final_time.tv_sec = currentTime.tv_sec + (microdelay / 1000000);
79 final_time.tv_nsec = (microdelay % 1000000) * 1000;
80 pthread_mutex_lock(&tsem->mutex);
81 while (tsem->semval == 0) {
82 err = pthread_cond_timedwait(&tsem->condition, &tsem->mutex, &final_time);
83 if (err != 0) {
84 tsem->semval--;
85 }
86 }
87 tsem->semval--;
88 pthread_mutex_unlock(&tsem->mutex);
89 return err;
90}
91
98 pthread_mutex_lock(&tsem->mutex);
99 while (tsem->semval == 0) {
100 pthread_cond_wait(&tsem->condition, &tsem->mutex);
101 }
102 tsem->semval--;
103 pthread_mutex_unlock(&tsem->mutex);
104}
105
111 pthread_mutex_lock(&tsem->mutex);
112 tsem->semval++;
113 pthread_cond_signal(&tsem->condition);
114 pthread_mutex_unlock(&tsem->mutex);
115}
116
122 pthread_mutex_lock(&tsem->mutex);
123 tsem->semval=0;
124 pthread_mutex_unlock(&tsem->mutex);
125}
126
132 pthread_mutex_lock(&tsem->mutex);
133 pthread_cond_wait(&tsem->condition, &tsem->mutex);
134 pthread_mutex_unlock(&tsem->mutex);
135}
136
142 pthread_mutex_lock(&tsem->mutex);
143 pthread_cond_signal(&tsem->condition);
144 pthread_mutex_unlock(&tsem->mutex);
145}
146
#define OSCL_EXPORT_REF
OMX_ERRORTYPE err
pthread_mutex_t mutex
Definition: tsemaphore.h:40
pthread_cond_t condition
Definition: tsemaphore.h:39
unsigned int semval
Definition: tsemaphore.h:41
void tsem_deinit(tsem_t *tsem)
Definition: tsemaphore.c:57
void tsem_signal(tsem_t *tsem)
Definition: tsemaphore.c:141
int tsem_timed_down(tsem_t *tsem, unsigned int milliSecondsDelay)
Definition: tsemaphore.c:69
void tsem_up(tsem_t *tsem)
Definition: tsemaphore.c:110
int tsem_init(tsem_t *tsem, unsigned int val)
Definition: tsemaphore.c:39
void tsem_down(tsem_t *tsem)
Definition: tsemaphore.c:97
void tsem_reset(tsem_t *tsem)
Definition: tsemaphore.c:121
void tsem_wait(tsem_t *tsem)
Definition: tsemaphore.c:131

Generated for OpenMAX Bellagio rel. 0.9.3 by  doxygen 1.5.1
SourceForge.net Logo