多執行緒程式何時需要加鎖

2021-07-13 09:30:27 字數 407 閱讀 4165

簡單的說三條:

多人讀,不需要

一讀一寫要加

多人寫要加

常見錯誤

1讀1寫沒事,讀寫的記憶體約多,越容易出事,因為不是原子操作

對int/int64/char型是原子操作, 可不加鎖,   其實沒人保證這一點的, 要不c++1x還出個原子模板類幹什麼

常用例項

vector的操作是安全的, 如乙個執行緒裡 buf[0]++, 另乙個buf[1]--是安全的, 因為的實現是 start+n, 多執行緒操作符合多人唯讀條件

最後鎖分為互斥(mutex)和自旋(spin)鎖

前者,在第乙個人鎖住後, 第二個人進不去時會sleep, cpu可以去幹別的

spin鎖的話,第二個人會一直在門口等, cpu也一直佔著,缺點顯而易見, 有點是進去快, 效率高

多執行緒程式謹慎給 DB 加鎖

servera 起 n 個執行緒,每個執行緒執行相同的邏輯,就是去 db 取乙個待執行的任務來執行,也就是常見的任務佇列。具體邏輯是 由於程式存在 bug,但是執行緒會異常退出,異常退出時和 db 之間的連線並沒有關閉 潛意識裡認為執行緒退出連線會自動關閉,進而鎖會被釋放 而異常恰好出現在 lock...

何時使用多執行緒?

何時使用多執行緒?1 改善使用者體驗,將使用者介面執行緒與工作執行緒分開,避免介面失去響應 2 提高i o效率,多執行緒方式比定時查詢方式操作i o更節省cpu 時延更小,提高系統的吞吐率 3 解耦i o操作,將一系列可並行的i o操作放在不同執行緒中執行,避免序列執行造成等待影響系統速度 4 充分...

多執行緒加鎖計數方法

import threading import time number 0def plus global number global宣告此處的number是外面的全域性變數number for in range 1000000 進行乙個大數級別的迴圈加一運算 number 1print 子執行緒 s...