多线程中的队列不一定需要线程安全
两个线程,主线程中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), //无延迟
。。。
唯一的问题是:可能延迟一帧执行,这一般而言不是问题。
以上只是理论推测,不知是否真正正确
posted on 2018-11-03 13:05 时空观察者9号 阅读(...) 评论(...) 编辑 收藏