我有一個使用線程池實現的基於UDP的應用程序。線程池共享資源鎖定問題
的消息推到一個隊列,當有事情要做或隊列中的消息線程池被喚醒。線程池處理每個消息並將它們傳遞給保持某種狀態的會話對象。即UDP分組是會話的一部分,並且會話正在重新組裝大塊數據。
該會話對象需要訪問共享資源。但是,另一個會話對象也可以從資源中讀取,但不能在寫入時讀取。
現在的問題是,對話對象DoWork的方法可以從不同的線程調用,我需要防止任何人寫的。所以要做到這一點,我需要鎖定資源。
這是問題出現的地方。如果我使用標準的互斥鎖,它不能在線程間移植,所以我會嘗試訪問資源,並且應該能夠將數據放入資源中,但除非我是鎖定資源的原始線程,否則我不能這樣做。
它是想我需要一個會話密鑰來訪問的資源,而不是我的 線程ID。
我該如何解決這個問題?在這裏提升shared_mutex似乎有點受限。
好的,我知道我需要一個讀寫器鎖,但是我不知道的和剛剛通過實驗發現的是另一個線程可以解鎖資源。 – Matt 2010-10-20 02:49:30