2010-02-16 61 views
0

我有一些數據容器,當它們中有更新時可以發送信號。該結構是這樣的相似:等待來自pthread中多個資源的條件

typedef struct { 
    int data; 
    /*...*/ 
    pthread_cond_t *onHaveUpdate; 
} Container; 

的onHaveUpdate是一個指向由所有容器

在我的應用程序共享的全局狀態,我有許多這樣的結構,他們可以兼任由不同的線程更新。

現在,我有可能有一個線程來偵聽條件,並可以在發送通知的容器上執行某些操作嗎?

我知道這可以通過每個容器使用一個線程來解決,但它感覺像是浪費資源,但我想知道這是否可以使用只有一個線程的所有容器?

回答

0

問題是您的條件是所有容器共享的,所以當您發送條件發生了變化時,您不知道發生了什麼變化。由於應用程序的體系結構不是100%清晰的,因此爲什麼不實現一個包含事件的Queue(並將指向容器的指針推送到該Queue)以及一個從該waitqueue接收事件並執行工作的工作線程。這樣你的工作隊列需要等待隊列被填滿的條件(或者以非侵略性的時間運行),這樣你就可以從容器中完全刪除條件變量。

+0

聽起來很不錯。以前沒有實現過事件隊列,但這聽起來像是一件容易的事情。謝謝! – DeeD 2010-02-16 13:33:19