乙個多執行緒的隱患

2022-01-13 14:41:57 字數 544 閱讀 5614

今天檢視專案**的時候發現下面這段**:

**

1

internal

movetask dequeue(

string

host)211

12lock

(m_queuelock)

1316

}

當時這段**實現時分了兩個lock為的就是對鎖的晚占用,早釋放。沒想到卻帶來了多執行緒環境下可能發生的隱患:某個時刻某個host的佇列長度剛好等於1,這時執行緒a擁有了鎖,那麼在第乙個lock檢查時該host佇列長度大於0,退出鎖。此時另外乙個執行緒b在a退出鎖之後也進入了鎖,也在第乙個lock檢查時發現同乙個host的佇列長度大於0,然後退出鎖,準備進入第二個lock。這時a執行緒由於b執行緒退出了鎖,從而得以進入第二個lock,對佇列執行dequeue方法後安全退出了鎖。然後b執行緒進入鎖執行dequeue方法,這時隊列為空,從而引發

**

1

internal

movetask dequeue(

string

host)213

}

多執行緒的安全隱患

資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 解決方法是互斥鎖 互斥鎖使用格式 synchronized 鎖物件 注意 鎖定1份 只用1把鎖,用多把...

乙個多執行緒程式

這個程式會讓你深刻的體會時間片,執行緒的優先順序!建議多測試這個程式,一定要看下面的注。using system using system.collections.generic using system.text using system.threading namespace 乙個多執行緒程式 ...

乙個多執行緒程式

這個程式會讓你深刻的體會時間片,執行緒的優先順序!建議多測試這個程式,一定要看下面的注。using system using system.collections.generic using system.text using system.threading namespace 乙個多執行緒程式 ...