C 11 互斥鎖對程式效能的影響

2021-08-13 09:48:28 字數 1230 閱讀 5092

在多執行緒中,對資料的保護機制,我們用到了互斥量、臨界區、讀寫鎖、條件變數等方法。一直以來都有些擔心鎖會降低程式的效能,儘管它是必須的,但究竟它能降低多少呢?那只有靠資料說話,下面的**是2個執行緒同時操作乙個變數:

class testa

explicit testa(int n) : _cnt(n)

~testa() {}

void beginthread()

_cnt -= 1;

_count++;

cout << _cnt << "\t";

return true;

};_thrd1.start();

_thrd2.setloopinterval(1);

_thrd2._funcrunloop = [this](void* p)

_cnt += 2;

_count++;

cout << _cnt << "\t";

return true;

};_thrd2.start();

} void stopthread()

private:

int _cnt, _max, _count;

dword _tbegin, _tend;

std::mutex _mt;

loopthread_thrd1;

loopthread_thrd2;

};int main()

注釋:loopthread是我封裝的乙個c++11執行緒類

執行上面的程式耗時65692毫秒,如下圖所示:

注意:每次執行耗費的時間都不大相同,但差別不是很大

將執行緒中鎖去掉後(即這行**:unique_locklck(_mt)),執行上述程式耗時65646毫秒,如下圖所示:

總結1:2個執行緒總共執行了大概130435~130836次,新增互斥鎖耗時(65692毫秒)-沒有互斥鎖耗時(65646毫秒)= 46毫秒,也就是說執行1000次互斥鎖大概耗時0.35毫秒,這差別微乎其微。

總結2:從以上資料可以看出,c++11互斥鎖機制的效率還是很高的,幾乎不怎麼占用時間,所以以後不用擔心鎖機制帶來的效率降低的問題了。

Cache 結構對程式效能的影響

乙個例子,我們來看看矩陣乘法中不同迴圈順序對程式效能的影響 我們知道,改變i j k迴圈的先後順序,不影響程式的結果,我們來看看改變後所用時間的變化,在程式中對下面一段 修改i j k的迴圈順序 for i 0 i i 結果如下 順序 時間i j k 9.798s i k j 4.934s k i ...

2執行緒同步 C 11中的互斥鎖

c11中mutex標頭檔案內容 mutex 類,基本的互斥鎖 recursive mutex 類,同一執行緒可以遞迴呼叫的互斥鎖 timed mutex 類,在指定的時間內能返回的鎖 recursive timed mutex 類,在指定的時間內能返回且同一執行緒能遞迴呼叫的鎖 adopt lock...

C 中Try Catch語句真的影響程式效能嗎?

很多帖子都分析過try catch的機制,以及其對效能的影響。但是並沒有證據證明,try catch過於損耗了系統的效能,尤其是在託管環境下。記得園子裡有位使用stopwatch分析過try catch在不同情況下,與無try catch的 相比,執行的時間指標,結果並沒有很大差異。下面我來結合il...