最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談C++11中的幾種鎖

 更新時間:2022年01月25日 11:23:48   作者:fzzjoy  
本文主要介紹了C++11中的幾種鎖,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

互斥鎖(mutex)

可以避免多個線程在某一時刻同時操作一個共享資源,標準C++庫提供了std::unique_lock類模板,實現(xiàn)了互斥鎖的RAII慣用語法:
eg:

std::unique_lock<std::mutex> lk(mtx_sync_);

條件鎖(condition_variable)

條件鎖就是所謂的條件變量,某一個線程因為某個條件未滿足時可以使用條件變量使該程序處于阻塞狀態(tài)。一旦條件滿足了,即可喚醒該線程(常和互斥鎖配合使用),喚醒后,需要檢查變量,避免虛假喚醒。
eg:

線程1:

// wait ack
{
? ? std::unique_lock<std::mutex> lk(mtx_sync_);
? ? if (!cv_sync_.wait_for(lk, 1000ms, [this](){return sync_; })) // wait for 1s
? ? {
? ? ? ? // wait failed
? ? ? ? printf("wait for notify timeout [%d].\n", cnt);
? ? ? ? return false;
? ? }
? ? else
? ? {
? ? ? ? return true;
? ? }
}

線程2:

{
?? ?std::unique_lock<std::mutex> lk(mtx_sync_);
?? ?sync_ = true;
}
// 通知前解鎖,可以避免喚醒線程后由于互斥鎖的關系又進入了阻塞階段
cv_sync_.notify_one();

自旋鎖(不推薦使用)

自旋鎖是一種基礎的同步原語,用于保障對共享數(shù)據(jù)的互斥訪問。與互斥鎖的相比,在獲取鎖失敗的時候不會使得線程阻塞而是一直自旋嘗試獲取鎖。當線程等待自旋鎖的時候,CPU不能做其他事情,而是一直處于輪詢忙等的狀態(tài)。自旋鎖主要適用于被持有時間短,線程不希望在重新調度上花過多時間的情況。實際上許多其他類型的鎖在底層使用了自旋鎖實現(xiàn),例如多數(shù)互斥鎖在試圖獲取鎖的時候會先自旋一小段時間,然后才會休眠。如果在持鎖時間很長的場景下使用自旋鎖,則會導致CPU在這個線程的時間片用盡之前一直消耗在無意義的忙等上,造成計算資源的浪費。

// 用戶空間用 atomic_flag 實現(xiàn)自旋互斥
#include <thread>
#include <vector>
#include <iostream>
#include <atomic>
?
std::atomic_flag lock = ATOMIC_FLAG_INIT;
?
void f(int n)
{
? ? for (int cnt = 0; cnt < 100; ++cnt) {
? ? ? ? while (lock.test_and_set(std::memory_order_acquire)) ?// 獲得鎖
? ? ? ? ? ? ?; // 自旋
? ? ? ? std::cout << "Output from thread " << n << '\n';
? ? ? ? lock.clear(std::memory_order_release); ? ? ? ? ? ? ? // 釋放鎖
? ? }
}
?
int main()
{
? ? std::vector<std::thread> v;
? ? for (int n = 0; n < 10; ++n) {
? ? ? ? v.emplace_back(f, n);
? ? }
? ? for (auto& t : v) {
? ? ? ? t.join();
? ? }
}

遞歸鎖(recursive_mutex)

recursive_mutex 類是同步原語,能用于保護共享數(shù)據(jù)免受從個多線程同時訪問。

recursive_mutex 提供排他性遞歸所有權語義:

  • 調用方線程在從它成功調用 lock 或 try_lock 開始的時期里占有 recursive_mutex 。此時期間,線程可以進行對 lock 或 try_lock 的附加調用。所有權的時期在線程調用 unlock 匹配次數(shù)時結束。
  • 線程占有 recursive_mutex 時,若其他所有線程試圖要求 recursive_mutex 的所有權,則它們將阻塞(對于調用 lock )或收到 false 返回值(對于調用 try_lock )。
  • 可鎖定 recursive_mutex 次數(shù)的最大值是未指定的,但抵達該數(shù)后,對 lock 的調用將拋出 std::system_error 而對 try_lock 的調用將返回 false 。
  • 若 recursive_mutex 在仍為某線程占有時被銷毀,則程序行為未定義。 recursive_mutex 類滿足互斥 (Mutex) 和標準布局類型 (StandardLayoutType) 的所有要求。

 到此這篇關于淺談C++11中的幾種鎖的文章就介紹到這了,更多相關C++11 鎖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何用C寫一個web服務器之GCC項目編譯

    如何用C寫一個web服務器之GCC項目編譯

    本文主要介紹了,如何用C寫一個web服務器,Linux下用GCC進行項目編譯,對此感興趣的同學,可以參考下。
    2021-05-05
  • C/C++中輸入多組數(shù)據(jù)的方法

    C/C++中輸入多組數(shù)據(jù)的方法

    這篇文章主要為大家詳細介紹了C/C++中輸入多組數(shù)據(jù)的三種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C語言實現(xiàn)掃雷游戲(含注釋詳解)

    C語言實現(xiàn)掃雷游戲(含注釋詳解)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷游戲,含注釋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 簡單總結C++中的修飾符類型

    簡單總結C++中的修飾符類型

    這篇文章主要介紹了C++中的修飾符類型總結,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-05-05
  • C/C++?pthread線程庫使用示例詳解

    C/C++?pthread線程庫使用示例詳解

    這篇文章主要介紹了C/C++?pthread線程庫使用示例詳解,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Opencv2.4.9函數(shù)HoughLinesP分析

    Opencv2.4.9函數(shù)HoughLinesP分析

    這篇文章主要為大家詳細介紹了Opencv2.4.9函數(shù)HoughLinesP,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語言運算符優(yōu)先級列表(超詳細)

    C語言運算符優(yōu)先級列表(超詳細)

    本篇文章是對C語言中運算符的優(yōu)先級進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中分支和循環(huán)的6種實現(xiàn)形式總結

    C語言中分支和循環(huán)的6種實現(xiàn)形式總結

    C語言時一門結構化的程序設計語言,這篇文章主要介紹了C語言中的分支和循環(huán)的6種實現(xiàn)形式,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04
  • Qt實現(xiàn)手動切換多種布局的完美方案

    Qt實現(xiàn)手動切換多種布局的完美方案

    通過點擊程序界面上不同的布局按鈕,使主工作區(qū)呈現(xiàn)出不同的頁面布局,多個布局之間可以通過點擊不同布局按鈕切換,支持的最多的窗口為9個,不同布局下窗口數(shù)隨之變化,這篇文章主要介紹了Qt實現(xiàn)手動切換多種布局的完美方案,需要的朋友可以參考下
    2024-07-07
  • VSCode配置C語言環(huán)境的方法

    VSCode配置C語言環(huán)境的方法

    這篇文章主要介紹了VSCode配置C語言環(huán)境的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

伊金霍洛旗| 铜梁县| 鹰潭市| 辽源市| 连南| 西畴县| 哈尔滨市| 黔西县| 莱西市| 荥经县| 固始县| 晋中市| 和硕县| 漯河市| 沅陵县| 准格尔旗| 汉沽区| 荔浦县| 四平市| 靖西县| 太仆寺旗| 白水县| 盐源县| 绥滨县| 固原市| 旬邑县| 泊头市| 丰城市| 常宁市| 桂阳县| 呈贡县| 南城县| 鲁山县| 叙永县| 平阳县| 民勤县| 保康县| 临猗县| 青海省| 靖西县| 寿宁县|