This repository was archived by the owner on Aug 19, 2021. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +9
-28
lines changed Expand file tree Collapse file tree 3 files changed +9
-28
lines changed Original file line number Diff line number Diff line change 20
20
CFLAGS += -I.
21
21
CFLAGS += -std=c99
22
22
CFLAGS += -Wall
23
- CFLAGS += -D_XOPEN_SOURCE=500
23
+ CFLAGS += -D_XOPEN_SOURCE=600
24
24
25
25
LFLAGS += -lpthread
26
26
Original file line number Diff line number Diff line change @@ -40,46 +40,30 @@ void events_mutex_unlock(events_mutex_t *m) {
40
40
}
41
41
42
42
43
+ // Semaphore operations
43
44
int events_sema_create (events_sema_t * s ) {
44
- int err = pthread_mutex_init (& s -> mutex , 0 );
45
- if (err ) {
46
- return err ;
47
- }
48
-
49
- err = pthread_cond_init (& s -> cond , 0 );
50
- if (err ) {
51
- return err ;
52
- }
53
-
54
- return 0 ;
45
+ return sem_init (s , 0 , 0 );
55
46
}
56
47
57
48
void events_sema_destroy (events_sema_t * s ) {
58
- pthread_mutex_destroy (& s -> mutex );
59
- pthread_cond_destroy (& s -> cond );
49
+ sem_destroy (s );
60
50
}
61
51
62
52
void events_sema_release (events_sema_t * s ) {
63
- pthread_cond_signal ( & s -> cond );
53
+ sem_post ( s );
64
54
}
65
55
66
56
bool events_sema_wait (events_sema_t * s , int ms ) {
67
- int err ;
68
- pthread_mutex_lock (& s -> mutex );
69
-
70
57
if (ms < 0 ) {
71
- err = pthread_cond_wait ( & s -> cond , & s -> mutex );
58
+ return ! sem_wait ( s );
72
59
} else {
73
60
ms += events_tick ();
74
61
struct timespec ts = {
75
62
.tv_sec = ms /1000 ,
76
63
.tv_nsec = ms * 1000000 ,
77
64
};
78
- err = pthread_cond_timedwait ( & s -> cond , & s -> mutex , & ts );
65
+ return ! sem_timedwait ( s , & ts );
79
66
}
80
-
81
- pthread_mutex_unlock (& s -> mutex );
82
- return !err ;
83
67
}
84
68
85
69
#endif
Original file line number Diff line number Diff line change @@ -19,11 +19,8 @@ extern "C" {
19
19
// Optimal implementation is a binary semaphore,
20
20
// however a regular semaphore is sufficient.
21
21
#if defined(__unix__ )
22
- #include <pthread.h>
23
- typedef struct {
24
- pthread_mutex_t mutex ;
25
- pthread_cond_t cond ;
26
- } events_sema_t ;
22
+ #include <semaphore.h>
23
+ typedef sem_t events_sema_t ;
27
24
#elif defined(__MBED__ )
28
25
#ifdef MBED_CONF_RTOS_PRESENT
29
26
typedef void * events_sema_t ;
You can’t perform that action at this time.
0 commit comments