C 多執行緒中的鎖和條件變數使用教程

2022-09-28 01:57:09 字數 1933 閱讀 9921

在做多執行緒程式設計時,有兩個場景我們都會遇到:

今天我用乙個簡單的例子來給大家介紹下鎖和條件變數的使用。

**使用c++11

示例**

#include

#include

#include

#include

std::mutex g_mutex; // 用到的全域性鎖

std::condition_variable g_cond; // 用到的條件變數

int g_i = 0;

bool g_running = true;

void threadfunc(int n) 作用域後鎖釋放

++g_i;

std::cout << "plus g_i by func thread " << std::this_thread::get_id() << std::endl;

} }std::unique_lock<:mutex> lock(g_mutex); // 加鎖

while (g_running)

std::cout << "func thread exit" << std::endl;

}int main() }

t1.join(); // 等待執行緒t1結束

std::cout << "g_i = " << g_i << std::endl;

}程式執行後,關鍵輸出如下:

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by func thread 139921006847744

plus g_i by func thread 139921006847744

plus g_i by func thread 139921006847744

plus g_i by func thread 139921006847744

plus g_i by func thread 139921006847744

wait for exit // func thread等待main thread發來的退出訊號

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

plus g_i by main thread 139921025066816

func thread exit

g_i = 200 // 鎖機制保證了g_i的正確

可以看到:

std::this_thread::get_id()

g_i加鎖方法介紹

加鎖相關的**為:

要點為:

這樣就實現了加鎖和解鎖的過程,為什麼不直接呼叫加鎖解鎖方法呢?

我想,這是因為如果加鎖和解鎖中間的**出現了問題,導致執行緒函式異常nsxgmg退出,那麼這個鎖就一直無法得到釋放,其它執行緒處理的不好的話,就會造成死鎖了。

條件變數使用介紹

結束語本文標題: c++多執行緒中的鎖和條件變數使用教程

本文位址:

多執行緒的互斥鎖和條件變數

執行緒間的互斥的同步一直是乙個很重要的地方,在這裡做個總結 所用的介面 int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg void pthread exit v...

多執行緒中條件變數的使用

如果想要實現在乙個執行緒中需要一直等待某種條件被滿足的時候,該執行緒才會進行處理,這個時候可以使用條件變數的方式來實現 乙個執行緒中進行wait,另一線程中當條件滿足時發出通知notify,這樣就不需要一直進行while迴圈進行判斷條件了 例如生產者和消費者情況 include include in...

c 多執行緒交替列印 條件變數 鎖

主要知識 多執行緒,條件變數,鎖。這裡其實有乙個難點,當然可以在看了 之後再回頭來看,就是對std condition variable wait方法的理解。這裡解釋一下,當執行wait方法時,鎖是會被解開的以便別的執行緒使用資源,但是呼叫wait的執行緒會被阻塞直到別的執行緒呼叫notify等一系...