OpenThreads執行緒管理

2021-08-04 19:55:53 字數 1763 閱讀 1408

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演算法將工作項從這個佇列中取出,並處理它們。由於多個工作者執行緒可能同時從全域性佇列中拿走工...