Bonjour,
Dans le cadre d'un petit projet multi thread, je désire utiliser des sémaphores.
Voici mon code :
Voici la sortie :
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 #include <iostream> #include <semaphore.h> #include <errno.h> #include "A.h" #include "C.h" using namespace std; sem_t A_fin, C_fin, A_debut, C_debut; void print_sem(void) { int val1, val2, val3, val4; sem_getvalue(&A_fin, &val1); sem_getvalue(&C_fin, &val2); sem_getvalue(&A_debut, &val3); sem_getvalue(&C_debut, &val4); cout << " "<< val1 << " "<< val2 << " " << val3 << " "<< val4 << endl; } int main (int argc, char * const argv[]) { if(sem_init(&A_debut, 0, 0)==-1)cout << "Err on Ad : " << errno << endl; if(sem_init(&C_debut, 0, 0)==-1)cout << "Err on Cd : " << errno << endl; if(sem_init(&C_fin, 0, 0)==-1)cout << "Err on Cf : " << errno << endl; if(sem_init(&A_fin, 0, 0)==-1)cout << "Err on Af : " << errno << endl; print_sem(); cout << "Sémaphore initialisés" << endl; /*...*/
[Session started at 2006-09-07 07:18:55 +0200.]
Err on Ad : 78
Err on Cd : 78
Err on Cf : 78
Err on Af : 78
125000 1 0 0
Sémaphore initialisés
Donc, chaque sémaphore s'initialise mal, puisque sem_init renvoie -1 et errno vaut 78. Ce code erreur est :"ENOSYS -> Function not implemented".
Normallement cette erreur se produit si on demande à ce que le sémaphore soit partagé entre plusieur processus.
Or avec mon 0 en deuxième argument de sem_init, cette erreur n'a pas lieu d'être me semble t il ???
Encore plus troublant, l'appel de sem_print me montre que mon premier et deuxième sémaphore sont initialisés à 125000 (valeurs qui change selon les exécutions) et 1.
Ce programme a été compilé avec g++ 4.0 (sous XCode), j'ai rajouté le flag -lpthread à la fin de ma ligne d'édition des liens.
Quelqu'un peut il m'expliquer pourquoi mon init est faux ?
Merci d'avance.
Partager