c 實現多執行緒同步

2021-08-20 05:11:57 字數 1365 閱讀 7365

執行緒同步是指同一程序中的多個執行緒互相協調工作從而達到一致性。之所以需要執行緒同步,是因為多個執行緒同時對乙個資料物件進行修改操作時,可能會對資料造成破壞,下面是多個執行緒同時修改同一資料造成破壞的例子:

1 #include 2 #include 3

4void fun_1(unsigned int &counter);

5void fun_2(unsigned int &counter);67

intmain()817

18void fun_1(unsigned int &counter)

1927

else

2831}32

}3334void fun_2(unsigned int &counter)

3543

else

4447

}48 }

執行結果如圖所示:

顯然輸出的結果存在問題,變數並沒有按順序遞增,所以執行緒同步是很重要的。在這裡記錄三種執行緒同步的方式:

①使用c++標準庫的thread、mutex標頭檔案:

1 #include 2 #include 3 #include 4

5void

fun_1();

6void

fun_2();

78 unsigned int counter = 0;9

std::mutex mtx;

1011

intmain()

1220

21void

fun_1()

2231

else

3235}36

}3738void

fun_2()

3948

else

4952

}53 }

這段**與前面一段**唯一的區別就是在兩個執行緒關聯的函式中加了一句 std::lock_guardmtx_locker(mtx); 在c++中,通過構造std::mutex的例項來建立互斥元,可通過呼叫其成員函式lock()和unlock()來實現加鎖和解鎖,然後這是不推薦的做法,因為這要求程式設計師在離開函式的每條**路徑上都呼叫unlock(),包括由於異常所導致的在內。作為替代,標準庫提供了std::lock_guard類模板,實現了互斥元的raii慣用語法(資源獲取即初始化)。該物件在構造時鎖定所給的互斥元,析構時解鎖該互斥元,從而保證被鎖定的互斥元始終被正確解鎖。**執行結果如下圖所示,可見得到了正確的結果。

C 多執行緒同步

在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程式繼續執行。在某些情況下可能會出現多個執行緒的同步協同的問題,下面的例子就展示了在兩個執行緒之間如何協同工作。這個程式的思路是共同做一件事情 從乙個arraylist中刪除元素 如果執行完...

同步,多執行緒 ,多執行緒方式實現併發。

io請求幾乎不佔cpu的。同步請求相當於排隊買東西,乙個卡主了,其他的都結不了賬了。執行緒並不是越多越好,如果他特別多還不如同步高,所以對執行緒要有個限制,所以就出現了執行緒池,執行緒池在python3裡才有的,python2裡沒有的。建立程序的話是耗費很多資源的,建立執行緒是幾乎不耗費資源的。建立...

多執行緒如何實現同步

在多個執行緒併發執行訪問同乙個資料時,如果不採取相應的措施,將會是非常危險的。所謂同步 synchronization 就是指乙個執行緒訪問資料時,其它執行緒不得對同乙個資料進行訪問,即同一時刻只能有乙個執行緒訪問該資料,當這一線程訪問結束時其它執行緒才能對這它進行訪問。同步最常見的方式就是使用鎖 ...