Я нашел следующий пример семафора.В настоящее время я изучаю синхронизацию потоков.У меня есть несколько вопросов.
1) Если семафор инициализируется со значением ноль, и я вызываю semaphore_down, значения семафоров теперь -1 или semaphore_down просто проверяет, больше ли значение нуля, чем block?
2) Я пишу для IOS, и нет доступной функции semaphore_down.Что такое равнозначный?Это то же самое, что и semaphore_wait?
Я хочу, чтобы поток продюсера работал вечно, ожидая, когда ему не нужно производить, и пробуждаясь, когда он обходится без блокировки в других потоках.
Это похоже на то, что мне нужно, но предложения приветствуются.
void reader_function(void);
void writer_function(void);
char buffer;
Semaphore writers_turn;
Semaphore readers_turn;
main()
{
pthread_t reader;
semaphore_init( &readers_turn );
semaphore_init( &writers_turn );
/* writer must go first */
semaphore_down( &readers_turn );
pthread_create( &reader, pthread_attr_default,
(void *)&reader_function, NULL);
writer_function();
}
void writer_function(void)
{
while(1)
{
semaphore_down( &writers_turn );
buffer = make_new_item();
semaphore_up( &readers_turn );
}
}
void reader_function(void)
{
while(1)
{
semaphore_down( &readers_turn );
consume_item( buffer );
semaphore_up( &writers_turn );
}
}