0
我發現了下面的信號量示例。我目前正在學習線程同步。我有幾個問題。 1)如果一個信號量的初始化值爲零,我調用semaphore_down是現在的信號量值-1,或者只是檢查semaphore_down是否大於零,然後阻止?iphone上的等價信號量遞減
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);
}
}
那麼這個例子來自一本書的摘錄,並沒有說它是什麼庫。我會嘗試semaphore_wait,看看會發生什麼。在ios上使用posix,信號量不可能小於0? – dubbeat
在任何系統上,信號計數都不可能小於0.如果計數小於0,則它不是信號量。 –