Multithreading 如何取消阻止等待信号量的所有线程?
我正在处理有限数组(或有限多个缓冲区)的标准生产者和消费者问题。我尝试使用信号量实现它,但遇到了一个问题。我希望制作人只“制作”50次。之后,我希望生产者线程加入主线程。这一部分很简单,但我不能做的是加入消费者线程。他们被困在信号灯上,表示没有数据。我如何解决这个问题?Multithreading 如何取消阻止等待信号量的所有线程?,multithreading,deadlock,semaphore,producer-consumer,Multithreading,Deadlock,Semaphore,Producer Consumer,我正在处理有限数组(或有限多个缓冲区)的标准生产者和消费者问题。我尝试使用信号量实现它,但遇到了一个问题。我希望制作人只“制作”50次。之后,我希望生产者线程加入主线程。这一部分很简单,但我不能做的是加入消费者线程。他们被困在信号灯上,表示没有数据。我如何解决这个问题? 一个可能的选择是使用一个flag变量,当producer加入main时,该变量变为True,之后,主线程执行post(信号量)的次数将是工作线程数的两倍。工作线程在每次唤醒后都会检查flag变量,如果为True,它将退出函数。
一个可能的选择是使用一个flag变量,当producer加入main时,该变量变为True,之后,主线程执行post(信号量)的次数将是工作线程数的两倍。工作线程在每次唤醒后都会检查flag变量,如果为True,它将退出函数。
我认为我的方法效率很低,因为有很多post信号量调用。如果我能一次解锁所有线程,那就太好了!
编辑:我试着执行我所说的,并且由于死锁 < P>不起作用。我在FieltoOS操作系统中只做了C++的生产者-消费者结构,所以请记住这一点。到目前为止,这是我在多任务处理方面的唯一经验。我想说的是,我在那个节目中只使用了一个制作人和一个消费者。我在LabView中做过多任务处理,但我想这和你可能做的有点不同 我认为一种选择是使用队列结构,这样生产者可以将元素排到队列中,但是如果队列中充满数据,那么您可以很有希望地实现它,这样您就可以制定某种队列策略,如下所示 制片人可以
<>但是我认为你应该提供更多细节,你要做的事情,尤其是消费线程,你有多少种线程,你在编程什么语言等等……< /P> < P>我在FieltoOS操作系统中只做了C++的生产者-消费者结构,所以请记住这一点。到目前为止,这是我在多任务处理方面的唯一经验。我想说的是,我在那个节目中只使用了一个制作人和一个消费者。我在LabView中做过多任务处理,但我想这和你可能做的有点不同 我认为一种选择是使用队列结构,这样生产者可以将元素排到队列中,但是如果队列中充满数据,那么您可以很有希望地实现它,这样您就可以制定某种队列策略,如下所示 制片人可以