Вопрос

Я работаю над некоторым кодом, который использует библиотеки pthread и semaphore.Тот Самый sem_init функция отлично работает на моем компьютере с Ubuntu, но в OS X sem_init функция не имеет абсолютно никакого эффекта.Что-то не так с библиотекой или есть другой способ сделать это?Это код, который я использую для тестирования.

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);

Значения представляются случайными числами, и они не изменяются после sem_init позвони.

Это было полезно?

Решение

Безымянные семафоры не поддерживаются, вам нужно использовать именованные семафоры.

Чтобы использовать именованные семафоры вместо неназванных семафоров, используйте sem_open вместо sem_init и используйте sem_close и sem_unlink вместо sem_destroy .

Другие советы

Лучшим решением (в наши дни), чем именованные семафоры в OS X, является dispatch_semaphore_t от Grand Central Dispatch.Это работает очень похоже на безымянные семафоры POSIX.

Инициализируйте семафор:

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

Ожидание и публикация (сигнала):

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

Уничтожить:

dispatch_release(semaphore);

Заголовочный файл хорошо документирован, и я нашел его довольно простым в использовании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top