c 11多執行緒以及上鎖的簡單例子

2021-08-04 13:45:46 字數 1179 閱讀 3855

多執行緒, 簡單的理解就是讓我們可以同時做多件事情, 以下為簡單例子.

#include #include using namespace std;

void first()

void second()

int main()

編譯命令需要加上 -lpthread 引數

而一般談到多執行緒就會涉及到上鎖的問題, 為什麼要上鎖? 是為了執行緒安全. 比方說我有兩個執行緒, 都要拿到乙個唯一的資料(只能被拿一次), 如果不上鎖, 那麼就很有可能兩個執行緒同時拿, 資料就被拿了兩次. 如果我們上鎖, 我們就限制了拿的操作在某個時間只能有乙個執行緒做, 如果這個時候其他執行緒也想做就得等待. 這樣就保證了執行緒安全.

例子:

#include #include #include #include using namespace std;

std::mutex mtx;

int a = 1;

void test()

else

cout << "nothing" << endl;

}int main(void)

這個例子使用了unique_lock鎖(還有lock_guard等種類的鎖), 我們設定了乙個唯一的數a, 它一被拿就馬上置0,然後就不能再拿了, 上鎖就能實現這樣的效果,輸出為

1nothing

nothing

nothing

nothing

nothing

nothing

nothing

nothing

nothing

而如果把上鎖的那一行注釋掉, 可以試一下看看輸出, 很明顯數a被拿了多次, 都通過了if(a)的判斷, 然後輸出也就會有本不應該有的負數, 也就不執行緒安全了.

也可以使用lock()和unlock()函式,手動加鎖以及釋放鎖

#include #include #include #include using namespace std;

std::mutex mtx;

int a = 1;

void test()

else

cout << "nothing" << endl;

mtx.unlock();

}int main(void)

C 11中多執行緒例子

c 11開始自帶執行緒相關的操作庫。這裡舉個例子,以併發程式設計最經典的例子,生產者消費者的例子來示例在c 11使用標準庫提供的執行緒庫來進行併發程式設計。這裡為了方便執行緒的使用,參考了android原始碼中對pthread的封裝。class thread virtual thread threa...

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...