假設我有一棵樹,並假設在樹的每個節點中都有一個條件變量。條件變量誤解
我們假設有5個節點試圖插入我的樹(已經有10個節點),並且出於某種原因,5無法插入(它們正在等待某些節點被刪除),所以我讓它們等待使用它們的條件變量。現在,在樹中發生刪除操作,我想檢查那些正在等待的刪除操作,然後我想發信號通知一個節點,我怎麼知道哪個線程發信號,我是否必須跟蹤所有條件變量最初在插入?
假設在一定的缺失,我想信號線3,正在等待(含2人一起),我怎麼能具體地說是信號線3',將線程3還記得他試圖插入?
在我刪除功能,當我信號,我不知道該線程等待條件變量是什麼,因爲每個節點都有一個條件變量,並且可以有每一個條件變量等待多個節點。我知道一個廣播都會聯繫所有的線程,但是我怎樣才能做到這一點,並且特別指出一個線程最初想要在樹中插入一個值5,但是因爲一個線程已經存在了,所以它不可能知道這5已被刪除,它應該插入5,但與5等待一起,有1,6,3,2的等待,所以我有5個條件變量,不知道哪一個是5
這是所有使用linux的C語言。
我不太明白你想要做什麼,但你幾乎肯定不希望在樹中的每個節點的單獨的條件變量。 – NPE
@NPE我怎麼才能知道只有一個條件變量的每個線程的上下文? – Ozymandy
@NPE讓我換句話說,假設我有一棵已經有節點2,3,4的樹,假設我想插入2和3,但是因爲它們已經存在,所以我等不及了。當刪除3時,我希望該線程被通知3已被刪除,然後插入。當刪除2時,我希望該線程得到通知,因此它可以插入2.當刪除4時,什麼都不應該發生。 – Ozymandy