多執行緒中的佇列不一定需要執行緒安全
阿新 • • 發佈:2018-11-03
兩個執行緒,主執行緒中update
update(){
while(queue.count >0){
//process....
queue.pop()
}
}
子執行緒中:
queue.enqueue(data)
這樣做是沒有問題的:
主執行緒:
pop (){ enqueue() {
1, delete node; 3, add node
2, count = count - 1; 4, count = count + 1
} }
程式碼以以下任意方式執行都是沒有問題的(1,2,3,4與if(queue.count >0)以任意方式排列):
1,2,if(queue.count > 0), 3,4 //資料延遲了一幀才被執行,是執行緒本身慢了,就算加了也一樣會延遲
1,2,3,if(queue.count > 0),,4 //資料延遲了一幀才被執行,是兩個執行緒同時執行導致的,如果加鎖了就不會有延遲
1,2,3,4,if(queue.count > 0), //無延遲
1,3,2,if(queue.count > 0),, 4 //資料延遲了一幀才被執行,是兩個執行緒同時執行導致的,如果加鎖了就不會有延遲
1,3,2,4,if(queue.count > 0), //無延遲
。。。
唯一的問題是:可能延遲一幀執行,這一般而言不是問題。
以上只是理論推測,不知是否真正正確