J'ai un code de sémaphore très basique qui fonctionne très bien sur Linux, mais qui ne peut pas fonctionner correctement sur OS X ... Il renvoie le résultat le plus étrange. ..SÉJ/sem_getvalue Behavior sémaphore sur OS X
#include <iostream>
#include <fcntl.h>
#include <stdio.h>
#include <semaphore.h>
int main()
{
sem_t* test;
test = sem_open("test", O_CREAT, 0, 1);
int value;
sem_getvalue(test, &value);
printf("Semaphore initialized to %d\n", value);
}
ce sur OS Compiler X avec g ++ retourne la sortie suivante:
iQudsi:Desktop mqudsi$ g++ test.cpp
iQudsi:Desktop mqudsi$ ./a.out
Semaphore initialized to -1881139893
Alors que sur Ubuntu, je reçois le résultat nettement plus sain d'esprit-:
iQudsi: Desktop mqudsi$ g++ test.cpp -lrt
iQudsi:Desktop mqudsi$ ./a.out
Semaphore initialized to 1
Je suis dans ce domaine depuis 3 heures d'affilée, et ne peut pas comprendre pourquoi OS X est de retour des résultats bizarres ...
J'ai essayé d'utiliser des chemins de fichiers comme le nom sémaphores, il n'a pas une différence.
J'apprécierais toute aide que je pourrais obtenir.
Le premier contrôle doit être « si (test == SEM_FAILED) » plutôt que le test, puisque c'est la valeur d'échec documenté (et en fait -1, pas 0). – smorgan
J'ai posté un suivi qui contient la raison pour laquelle son code a échoué: http://stackoverflow.com/questions/871435/odd-incorrect-semaphore-behavior-on-os-x/871794#871794 –