2015-07-11 35 views
2

我有兩個使用System V共享內存進行通信的程序。是否有可能將System V共享內存與POSIX信號量一起使用?

這兩個程序都按照他們應該的方式工作,但我想添加命名的信號量以避免競爭條件。

我曾嘗試以下:

sem_t *sem = sem_open("/semaphorename", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 0); 

if(sem == SEM_FAILED){ 
    sem = sem_open("/semaphorename", 0); 
} 

while(1){ 
    /*get input from user */ 
    sem_wait(sem); 
    /* write to shared memory. If QUIT is entered, break from while loop */ 
    sem_post(sem); 
} 
sem_close(sem); 
sem_unlink("/semaphorename"); 

沒有信號燈,程序工作,但他們,沒有數據被寫入到共享內存。我在做什麼錯誤,當我使用System V共享內存時甚至有可能使用這些信號量?

回答

2

由於信號量的初始值爲0,因此sem_wait()將一直等到有人執行爲止sem_post()。因此,僅在其中一個程序中使用單個sem_post()初始化信號量。

相關問題