簡體   English   中英

每個線程組的Pthread互斥鎖

[英]Pthread mutex per thread group

我正在尋找正確的解決方案來保護線程組,就像我通常使用單個線程那樣,即:線程1和2之一或兩者都可以同時鎖定互斥鎖M,而1和2都不會進入睡眠狀態。 互斥鎖M抵靠線程3。因此,如果線程3在互斥鎖被線程1或2或兩者同時鎖定時鎖定了互斥鎖,則線程3將進入休眠狀態。 如果線程1或2在被線程3鎖定時鎖定了互斥鎖,則1或2(以鎖定狀態為准)也將進入睡眠狀態,直到3釋放它為止。

謝謝。

如果您的意思是在關鍵部分中不希望有兩個以上的線程,而在關鍵部分中保留了第三個線程,則必須使用POSiX Semaphore初始化為2。Semaphore計數器可以初始化為任何值,每個sem_wait減1計數器(鎖定它),每個sem_post都會增加它(釋放它)。 互斥鎖是初始化為1.的信號量的特例。

或者,如果您想要一個寫入線程和兩個或更多讀取器,則可以使用rwlocks。

但是我要閱讀建議的posix信號量(這似乎是我想要的),我已經找到了以“舊方式”進行操作的方式:Stevens UNP p。 703,使用pthread_cond,元代碼將如下所示:

int var = 0;
pthread_mutex_t M;
pthread_cond_t C;

threadA:      lock M; var++; unlock M; do_job; lock M; var--; cond_signal(&C); unlock M
threadB:      lock M; var++; unlock M; do_job; lock M; var--; cond_signal(&C); unlock M

thread Main:  lock M; while (var > 0) cond_wait(&C, &M); do_protected_job; unlock M

也許,信號量以較少的麻煩方式允許相同的操作,我將檢查...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM