我有共享內存,x個作者,y個讀者,一個父進程。作家有獨家訪問權限,所以一個作家可以寫作,其他讀者和作家必須等待。多個閱讀器可以並行讀取。優先考慮的是作家,例如,如果3位讀者正在閱讀,並且一位作者想要寫入該共享內存,那麼當這3位讀者完成他們的工作時,沒有更多的讀者可以閱讀並且作家可以寫作。我不知道如何通過信號量來實現它,因爲讀者可以並行讀取,因此下一個代碼將無法工作,因爲那麼所有讀者都將在該信號量中等待。訪問共享內存同步
//reader
if(isWriterActive())
{
sem_wait(semReaderStop);
}
//writer
sem_wait(semReaderStop());
.
.
sem_post(semReaderStop());
我覺得這樣的事情不好,因爲它沒有阻塞。
//readers doJob
if(isWriterActive())
{
return E_WRITER_ACTIVE;
}
while(doJob()==E_WRITER_ACTIVE);
這是讀卡器/寫卡器鎖的常用描述。看看pthread_rwlock http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_rwlock_init.html – gastush
永遠不要試圖自己實現鎖定原語。只要使用正常的讀/寫鎖(但要確保他們的行爲是這樣的,作家不會餓死)。 – ugoren
我需要使用信號量(學校)。 – Krab