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