利用 C++ 11 特性實現多執行緒計數器

w39發表於2021-09-09


許多平行計算程式,需要確定待計算資料的編號,或者說,多執行緒間透過編號而耦合。此時,透過利用C++ 11提供的atomic_?type型別,可實現多執行緒安全的計數器,從而,降低多執行緒間的耦合,以便於書寫多執行緒程式。

以計數器實現為例子,演示了多執行緒計數器的實現技術方法,程式碼如下:

//目的: 測試利用C++ 11特性實現計數器的方法//作業系統:ubuntu 14.04//publish_date: 2015-1-31//注意所使用的編譯命令: g++ -Wl,--no-as-needed -std=c++0x counter.cpp -lpthread#include #include #include #include using namespace std;atomic_int Counter(0);int order[400];void work(int id){	int no;	for(int i = 0; i  threads;	//建立多執行緒訪問計數器
    for (int i = 0; i != 4; ++i)    	//執行緒工作函式與執行緒標記引數
        threads.push_back(thread(work, i));    for (auto & th:threads)
        th.join();    //最終的計數值
    cout 

注意編譯命令的引數,尤其,-lpthread

否則,若無該連結引數,則編譯不會出錯,但會發生執行時錯誤:

terminate called after throwing an instance of ‘std::system_error’
what():  Enable multithreading to use std::thread: Operation not permitted
已放棄 (核心已轉儲)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/854/viewspace-2801799/,如需轉載,請註明出處,否則將追究法律責任。

相關文章