voici ma classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 class Semaphore { public: static const int WAIT_FOREVER = -1; static int num; protected: sem_t id; char name[20]; public: Semaphore() { sprintf(name,"%d",num); num++; if (num >= SEM_VALUE_MAX) { printf("attention nombre maximal de semaphores atteint\n"); } } Semaphore(sem_t id) : id(id) { strcpy(name,"\0"); } public: virtual bool take(int to) { return (sem_wait(&id) == 0); } void take() { take(WAIT_FOREVER); } virtual void give() { sem_post(&id); } virtual void flush() { int tmp; do { sem_getvalue(&id,&tmp); } while (tmp > 0); } virtual ~Semaphore() { sem_destroy(&id); free(name); } }; int Semaphore::num = 1;
et mon main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main(int argc, char* argv[]) { sem_t sem; sem_init(&sem, 1, 0); Semaphore cSem; return 0; }
tout passe jusqu'à la fin de sem_init
mais avec cSem je me prends un segmentation fault... et je ne comprends pas d'où il vient
ps: les timeout ne sont pas encore implémentés... je sais![]()
Partager