簡體   English   中英

pthread_rwlock_rdlock()和pthread_rwlock_wrlock()

[英]pthread_rwlock_rdlock() and pthread_rwlock_wrlock()

我對這些功能的行為規范一無所知。

想象一下這種情況:
T1,T2和T3是線程的名稱。
連續執行操作。

    T1 calls pthread_rwlock_rdlock().
    T2 calls pthread_rwlock_wrlock() and wait because 
    rwlock is hold by T1.
    T3 calls pthread_rwlock_rdlock().
    T1 calls pthread_rwlock_unlock().

接下來是什么?

規范說:
“如果寫程序不持有該寫鎖並且沒有寫程序被阻塞,則調用線程將獲得讀鎖”

我無法理解T3是否會在T2之前取得成功。
我希望是的。
你能解決我的問題嗎?

如果支持線程執行計划,則應該能夠選擇它的工作方式。 pthread_rwlock_rdlock的手冊頁中:

如果支持“線程執行調度”選項,並且鎖中涉及的線程正在使用調度策略SCHED_FIFO或SCHED_RR執行,則如果寫入者持有該鎖或阻塞了更高或同等優先級的寫入者,則調用線程將不會獲取該鎖。在鎖上 否則,調用線程將獲得鎖。

如果支持“線程執行調度”選項,並且鎖中涉及的線程正在使用SCHED_SPORADIC調度策略執行,則如果寫入者持有該鎖,或者在該線程上阻塞了更高或同等優先級的寫入者,則調用線程將不會獲取該鎖。鎖; 否則,調用線程將獲得鎖。

否則,它是實現定義的:

如果不支持“線程執行調度”選項, 則由實現方式定義,當寫程序不持有該鎖且有寫程序被阻塞時,調用線程是否獲取該鎖。 如果寫者持有該鎖,則調用線程將不獲取讀鎖。 如果未獲取讀鎖,則調用線程將阻塞,直到它可以獲取鎖為止。 如果在調用時它擁有寫鎖,則調用線程可能會死鎖。

暫無
暫無

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

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