Question

Je travaille sur un code qui utilise les bibliothèques pthread et sémaphore. La fonction sem_init fonctionne bien sur ma machine Ubuntu, mais sous OS X, la fonction sem_init n'a absolument aucun effet. Y a-t-il quelque chose qui ne va pas dans la bibliothèque ou y a-t-il une façon différente de le faire? C’est le code que j’utilise pour tester.

sem_t sem1;
sem_t sem2;
sem_t sem3;
sem_t sem4;
sem_t sem5;
sem_t sem6;

sem_init(&sem1, 1, 1);
sem_init(&sem2, 1, 2);
sem_init(&sem3, 1, 3);
sem_init(&sem4, 1, 4);
sem_init(&sem5, 1, 5);
sem_init(&sem6, 1, 6);

Les valeurs semblent être des nombres aléatoires et elles ne changent pas après l'appel sem_init .

Était-ce utile?

La solution

Les sémaphores non nommés ne sont pas pris en charge, vous devez utiliser des sémaphores nommés.

Pour utiliser des sémaphores nommés au lieu de sémaphores non nommés, utilisez sem_open au lieu de sem_init , et utilisez sem_close et sem_unlink au lieu de sem_destroy .

Autres conseils

Une meilleure solution (ces jours-ci) que les sémaphores nommés sous OS X est dispatch_semaphore_t de Grand Central Dispatch. Cela ressemble beaucoup aux sémaphores POSIX non nommés.

Initialiser le sémaphore:

#include <dispatch/dispatch.h>
dispatch_semaphore_t semaphore;
semaphore = dispatch_semaphore_create(1); // init with value of 1

Wait & amp; poste (signal):

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
...
dispatch_semaphore_signal(semaphore);

Détruire:

dispatch_release(semaphore);

Le fichier d'en-tête est bien documenté et je l'ai trouvé assez facile à utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top