欧美日韩在线第一页-欧美日韩在线观看精品-欧美日韩在线观看一区二区-欧美日韩在线免费看-欧美日韩在线视频不卡一区二区三区

編程代碼
新聞詳情

C++11多線程編程(二)——互斥鎖mutex用法

發布時間:2021-01-04 09:28:40 瀏覽次數:1836

還是那個問題,編程世界中學習一個新的技術點,一定要明白一件事,為什么要出現這個技術點,只有弄懂了這個才能從根本上有學習的動力。那么為什么要出現多線程鎖這個東西呢?一句話概括的話。

為了保證數據的準確性!


計算機就是為了計算數據才誕生的,如果不能保證數據準確的話,任何技術都只是空中樓閣,多線程技術也是一樣,那么為什么多線程會讓數據不準確呢?大家可以看下以下的這個例子

#include <iostream>
#include <thread>
#include <string>
using namespace std;

void thread_task()
{
    for (int i = 0; i < 10; i++)
    {
        cout << "print thread: " << i << endl;
    }
}
int main()
{
    thread t(thread_task);
    for (int i = 0; i > -10; i--)
    {
        cout << "print main: " << i << endl;
    }
    t.join();
    return 0;

}

輸出結果

C++11多線程編程(二)——互斥鎖mutex用法

大家可以看到產生了一個很奇怪的現象,按理說輸出“print thread:”之后應該跟著i的值,但是i的值卻跑到“print main:”的后面了,這顯然不是我們能要的結果,那為什么會這樣呢?因為多線程執行的話,是操作系統內部控制的,一般是通過時間片輪詢來輪流執行的,甚至在多核CPU下是并行執行的。

那么怎么解決這個問題呢?以便我們在一個線程里處理完我們所需要的數據之后,然后才將控制權交出呢?這個就是用到鎖這個東西。

假設線程A在執行cout << "print thread: " << i << endl;這個代碼之前,在前面鎖住一下,當線程B想來搶奪控制權的時候,發現這個地方已經被上鎖了,無法搶奪,只能等待,等待它釋放。執行完那個代碼之后就可以釋放鎖,然后B線程就是來搶奪控制權了,一旦B獲得了控制權也給自己上了鎖,防止在執行關鍵地方的時候被別人奪去控制權。那么C++如何實現加鎖的過程的呢?

C++當中用到的一個類是mutex,這個中文就是互斥量的意思,顧名思義,就是一個時刻只能有一個訪問,以下是代碼

#include <iostream>
#include <thread>
#include <string>
#include <mutex>
using namespace std;

mutex mt;
void thread_task()
{
    for (int i = 0; i < 10; i++)
    {
        mt.lock();
        cout << "print thread: " << i << endl;
        mt.unlock();
    }
}

int main()
{
    thread t(thread_task);
    for (int i = 0; i > -10; i--)
    {
        mt.lock();
        cout << "print main: " << i << endl;
        mt.unlock();
    }
    t.join();
    return 0;
}

在需要加鎖的地方,調用metex的lock()方法,解鎖的地方unloc()方法,這樣就可以順序的輸出了所需要的結果了。

C++11多線程編程(二)——互斥鎖mutex用法

以上就是C++中關于互斥鎖的機制,相當的簡單容易理解。

在線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13822267203
主站蜘蛛池模板: 久久视频在线免费观看| 91外围| 久久综合精品视频| 很污很污的网站| 成人夜色视频| 91社区在线视频| 日韩无遮挡大尺度啪啪影片| 99青草青草久热精品视频| 欧洲一级毛片免费| 日本一级毛片无遮挡| 日韩精品欧美国产精品亚| 黄色网址在线免费看| 欧美成人影院在线观看三级| 可以免费看黄的网站| 亚洲欧美久久婷婷爱综合一区天堂| 国内精品久久久久鸭| 国产成本人三级在线观看网站| 在线中文字幕视频| 中日韩欧美一级毛片| 国内精品第一页| 国产成人精品高清在线观看99| 中文字幕久久综合伊人| 亚洲福利视频一区二区| 嫩操影院| 色久综合| 自拍偷拍欧美亚洲| 大片免免费观看视频播放网站| 欧美在线黄色片| 一级片手机在线| 国产视频福利在线| 国产免费一级高清淫日本片| 亚洲国产精品影院| 亚洲精品一区二区手机在线| 精品一区二区三区四区乱码90| 欧美一级毛片国产一级毛片| 久草a视频| 欧美亚洲综合另类| 爱爱动态视频免费| 亚洲欧美国产高清va在线播放| 亚洲国产精品午夜电影| 啪视频在线观看高清|