簡體   English   中英

如何在調用pthread_cond_destroy之前發出信號以中止/喚醒所有等待條件變量的線程?

[英]How do I signal to abort/wake all threads waiting on a condition variable before calling pthread_cond_destroy?

我知道當有1個以上的線程在等待條件變量時調用pthread_cond_destroy()時會發生不確定的行為,並且我正在尋找一種變通方法,以便在調用pthread_cond_destroy()之前向所有等待條件變量的線程發送喚醒信號

如果條件變量有效,我的CV類析構函數將調用pthread_cond_destroy()。 因此,我想到了:

  1. 在調用pthread_cond_destroy()之前進行廣播,但這只會喚醒1個線程。 我希望析構函數成功執行,並且沒有線程應該能夠在cv對象上等待(在析構對象上不進行解引用)。

  2. 信號計數(以及變通方法1)是否可以解決此問題? 如果是這樣,我如何確保在〜CV()成功之前已計划(喚醒)所有等待線程?

  3. 如果使用C ++ 11線程/條件變量,是否可以解決此問題?

這是我的操作方式(假設您要破壞條件變量,因為您正在清理並希望線程退出;如果您不希望線程退出,則不應破壞條件變量,因為它們是使用):

  1. 設置一個布爾標志(或其他標志),該標志指示您希望所有線程都消失
  2. 調用pthread_cond_broadcast()喚醒所有線程(以便他們可以檢查該標志,查看該標志是否已設置並通過干凈退出進行響應)
  3. 在每個線程上調用pthread_join(),這樣您將知道它們都已消失,因此繼續進行下一步是安全的
  4. 調用pthread_cond_destroy()銷毀您的條件變量(現在可以安全地執行此操作,因為您知道沒有線程在使用它,因為它們都在第3步完成之前退出了)

暫無
暫無

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

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