openscenegraph中線程(openthreads)的作用多種多樣,涉及到訊號量機制,同步非同步鎖等多種知識點。
openthreads:
threads:建立執行緒,類似於windows中的_beginthread,
mutex :建立互斥,類似於windows中的createmutex,用於針對多個執行緒訪問同一資源 情況。
condition:建立條件,用於符合條件時才啟動某個執行緒,使用mutex實現。
barrier :建立壁壘,用於同步執行緒,比如某操作必須前面幾個執行緒完成時才能進行。
執行緒呼叫大致分為四個方法:
其一:運用windows.h的執行緒方法,通過建立執行緒函式,進行執行緒的呼叫以及訊號量機制的占用以及
釋放。這裡用兩個程序買票的例子。
#include
#include
#include
int tickets = 10;
handle imutex;//建立乙個控制代碼
void selltickets1(void *ptr)
}void selltickets2(void *ptr)
}int main()
其二:通過例項化繼承thread的類的物件,然後將其呼叫start函式,啟動執行緒,通過呼叫
scopedlock函式規定其執行緒在這個範圍內執行結束後才能釋放,其餘執行緒處於等待時間。
#include
#include
#include
#include
#include
openthreads::mutex mutex;
class threadself : public openthreads::thread
virtual ~threadself()
void run()
}int threadid;
};int main()
其三:通過例項化繼承thread的類的物件,然後將其呼叫start函式,啟動執行緒,通過呼叫
block(n)函式規定其之前的n個執行緒完成時後才能執行之後的程式,否則將一直處於等待時
間。n從0開始,如果程序執行次數大於所給數字,就會衝破壁壘,然後執行下邊的程序。
#include
#include
#include
#include
openthreads::barrier bar;
class threadself : public openthreads::thread
virtual ~threadself()
void run()
bar.block();
}int threadid;
};int main()
其四:運用windows.h的執行緒方法,通過_beginthread建立執行緒函式,通過condition定義的物件
cont來進行訊號量的等待以及釋放,通過mutex來作為條件,運用signal函式以及wait函式進
行執行緒的管理。
#include
#include
#include
#include
int condition = 0;
openthreads::condition cont;
openthreads::mutex mutex;
void setcondition(void *ptr)
void ifcondition(void *ptr)
int main()
OpenThreads執行緒庫
openthreads與pthread不同點在於,他是根據物件導向開發的。傳統的 1.互斥量openthreads mutex類 當執行緒使用某一資源時,先使用互斥量加鎖。由於採用了物件導向機制將互斥量抽象為乙個類,所以不像pthread函式那樣傳入個引數。mutext有兩個函式 int mutex...
OpenThreads庫的使用 Mutex
mutex,叫互斥鎖。在程式設計中,引入了物件互斥鎖的概念,來保證共享資料操作的完整性。每個物件都對應於乙個可稱為 互斥鎖 的標記,這個標記用來保證在任一時刻,只能有乙個執行緒訪問該物件。因為執行緒存在併發性,併發容易導致問題。舉個例子 a,b兩個售票員,看到最後還有一張車票。同時,正好有c,d兩個...
執行緒池 執行緒管理
執行緒池中的執行緒由兩類組成 工作者執行緒和i o執行緒。threadpool.queueuserworkitem和timer類總是將工作項 即執行緒要 的委託 放到全域性佇列中。工作者執行緒採用乙個fifo演算法將工作項從這個佇列中取出,並處理它們。由於多個工作者執行緒可能同時從全域性佇列中拿走工...