linux - 多线程编程中的mutex
PHP中文网
PHP中文网 2017-04-17 16:28:49
0
3
825
#include <mutex>

int a;
char c;
std::mutex t;

int main()
{
    std::lock_guard<std::mutex> zz(t);
    a = 2;
    c = '1';
    return 0;
}

如上面这小段代码,请问c++11中的mutex,是不是只要mutex被锁住了,就是默认对所有的共享数据加上了锁?

PHP中文网
PHP中文网

认证0级讲师

全部回覆(3)
巴扎黑

鎖的範圍取決於你的lock的作用域,那麼在你這個測試程式中就是鎖住了main作用域了。
當然你這個範例程式本身是沒有意義的哈,因為不是用在多執行緒下。假設是多執行緒吧,這時別的執行緒在嘗試鎖mutex時就需要等你這裡的mutex鎖釋放,也就是說某一時刻只有一個執行緒能存取變數a和c。

PHPzhong

加鎖以後,互斥鎖就被保持住,除非當前線程釋放,當前線程在獲得鎖的時候就已經執行完這一行程式碼,進入了下一行執行,因此它有釋放互斥鎖的資格。而等待該鎖定的其它執行緒在鎖定釋放前都會沉睡在這一行程式碼,直到被作業系統從等待佇列中喚醒。

互斥鎖對資源存取進行把控。進入臨界區需要取得鎖,此時該執行緒擁有了對資源消耗的權力,也就是對共享資料修改的權力。退出臨界區需要釋放鎖,將鎖釋放掉給其它執行緒繼續執行。

巴扎黑

簡單的說,不會。 Mutex是一種鎖,它只是保證同時有一個執行緒可以鎖住它,但是全域變數怎麼控制是你自己程式碼實現的。也就是一種約定,如果另外一個執行緒不去先試圖鎖定Mutex,而是直接去修改那些全域變量,是不會被阻止的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!