标签:locking 队列 block for循环 个数 先后 一个 互斥 并发
用的是两个lock,putlock和takelock
这样一来其实就相当于两个线程
但是两个线程操作指针也会有并发问题
如果队列元素个数大于1,是不会有问题的,因为put是在队列尾,take是在队列头部
如果队列元素个数为0或者1,会有可能
在设计上是,先放,再cas加一,取的线程在for循环获取,先看cas取是不是大于0,这样就有了一个先后顺序:必须是放完了,才能取,不会是一边放一边取,所以这里存和取还是互斥的。
标签:locking 队列 block for循环 个数 先后 一个 互斥 并发
原文地址:https://www.cnblogs.com/chuliang/p/9007408.html