Bonjour,
Dans le cadre d'un petit projet multi thread, je désire utiliser des sémaphores.
Voici mon code :

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;
/*...*/
Voici la sortie :
[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.