最近从java源码里发现了阻塞队列的实现,觉得非常有趣。也就是说,我们可以在多个线程之间并发的进行写数据和读数据,而不会引发任何并发问题。为了性能,这里的读和写的锁不能是同一把锁。也就是说,head所指向的节点中的val值没有任何实际含义。当需要出队时,出队head指向的下一个节点first中val的值,然后抛弃head本身指向的值,让head指向head的下一个节点first,此时head原来所指向的节点将被删除。现在我们可以看出出队操作也只改变了头指针head的值。入队让我们先来实现put这个方法。在该线程入队操作完成后,可能有别的线程也在等待入队,需要唤醒其他写数据的线程,使其继续执行后续操作。take函数的代码实现为:剩下的实现细节可以参考

c++实现LinkBlockedQueue的问题

c++实现LinkBlockedQueue的问题

c++实现LinkBlockedQueue的问题

c++实现LinkBlockedQueue的问题

c++实现LinkBlockedQueue的问题