对不起,如果这是一个微不足道的问题。但我在任何地方都找不到答案。我正在编写一个使用 pthread 的程序。一个线程获取锁(互斥锁),然后尝试将数据推送到同步缓冲区中。缓冲区有自己的互斥锁,一旦调用push()方法就会获取该互斥锁。
如果缓冲区已满并且线程需要等待条件变量,等待调用会释放所有获取的锁吗?或者它会释放与条件变量关联的那个(恰好是最后一个获得的锁)?如果是后者,如果另一个线程需要获取第一个锁,我该如何避免死锁?
编辑:
我遇到的问题如下。我有两个线程,比如A和B。线程A有一个for循环,可将数据插入多个缓冲区。每次迭代都会将一个元素插入其中一个缓冲区。由于这是一个线程,它会在该线程的另一个外部循环中连续执行该循环。当B被激活时,它会操纵这些缓冲区。但是如果A在执行for循环的过程中被调度程序中断,则B不能对缓冲区进行操作。因此,我使用互斥锁来锁定A中的关键部分,即for循环。
编辑2:
我一直在考虑。我的问题的答案肯定不会是缓冲区的条件变量也释放第一个锁。这意味着最初甚至不需要第一个锁。如果负责从缓冲区中删除元素的消费者线程(不同于线程B )正在正常工作,线程A将在某个点恢复并且for循环将完成。因此,我的问题一定出在那儿。我会仔细看看并更新。