信号量解决死锁,缓冲区如果不用阻塞队列不会有并发问题吗

来源:5-6 阻塞队列之和面试官聊聊睡觉的理发师问题

Martin_zyt

2021-11-20

老师好,我这边用java信号量的写法试了一下,如果缓冲区仅用普通链表作为队列,发现还是会有并发问题。
比如,队列中有较多空闲位置时,多个生产者线程可以通过emptyCount.acquire()同时进行生产,但因为用的是普通队列,多个线程同时add数据的话,其实只有一个数据是真正add进去的。
如果用了阻塞队列,那么也没有使用信号量的必要了,如果只用信号量来控制,又会有上面描述的并发问题,所以仅用信号量是不是无法解决生产者/消费者问题?
还请老师有空帮忙答疑解惑

写回答

1回答

求老仙

2021-11-22

信号量不是锁, 锁是一种特殊的信号量。 信号量控制进入临界区的线程数量,锁是控制临界区自由一个线程,所以,信号量是不保证同步的。 

0
1
Martin_zyt
好的,我简单照着本节课件中的伪代码来写的 生产者消费者_信号量 demo,后来发现有问题,多谢老师解惑。
2021-11-22
共1条回复

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程