多线程中的队列不一定需要线程安全
多線程中的隊(duì)列不一定需要線程安全
兩個(gè)線程,主線程中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
} }
代碼以以下任意方式執(zhí)行都是沒有問題的(1,2,3,4與if(queue.count >0)以任意方式排列):
1,2,if(queue.count > 0),? 3,4? ?//數(shù)據(jù)延遲了一幀才被執(zhí)行,是線程本身慢了,就算加了也一樣會(huì)延遲
1,2,3,if(queue.count > 0),,4? ?//數(shù)據(jù)延遲了一幀才被執(zhí)行,是兩個(gè)線程同時(shí)執(zhí)行導(dǎo)致的,如果加鎖了就不會(huì)有延遲
1,2,3,4,if(queue.count > 0),? //無延遲
1,3,2,if(queue.count > 0),, 4? ?//數(shù)據(jù)延遲了一幀才被執(zhí)行,是兩個(gè)線程同時(shí)執(zhí)行導(dǎo)致的,如果加鎖了就不會(huì)有延遲
1,3,2,4,if(queue.count > 0),??//無延遲
。。。
唯一的問題是:可能延遲一幀執(zhí)行,這一般而言不是問題。
?
以上只是理論推測,不知是否真正正確
posted on 2018-11-03 13:05 時(shí)空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結(jié)
以上是生活随笔為你收集整理的多线程中的队列不一定需要线程安全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BUG记录】记一次游戏越来越卡的BUG
- 下一篇: 参数不同不能合批