2016-03-19 119 views
0

有限等待条件下实现信号量的方法是什么?有限等待信号灯

我知道可以通过将在信号量上等待的进程列表保持为FIFO来遵循有界的等待标准。 但是,有没有其他方法可以在不对正在使用的列表类型施加任何约束的情况下做到这一点?

+0

一般来说,没有。 IME,用于信号量的线程容器是FIFO队列。我想,如果你有来源,例如。对于Linux,您可以使用其他列表类,如果您需要,出于某种原因(?)。 –

回答

0

没有什么能阻止你构建任何一种你想复杂生产者 - 消费者类的,但它可以是不平凡:

1)使用互斥锁来控制访问线程管理数据,既是生产者又是消费者线程。

2)在互斥体内部,使用任何复杂的算法/容器/无论做什么 - 它在那里很好,很安全。 3)如果一个线程发现它由于某种原因不能继续进行,它应该获得一个信号量,将其存储在管理数据中,退出互斥体并等待信号量。如果一个线程需要释放一些可能允许另一个线程运行的资源,它应该进入互斥量,分析管理数据,并且如果它发现现在可以允许运行的线程信号,他们退出互斥体之前的信号量。

请注意,这是'我奇怪的线程锁定/管理要求Thingy'的通用渠道。它涵盖了疯狂的wondercontainers,(你必须使用如下定义的变量几何,多级反馈超级队列),疯狂的多资源约束(线程AB24只能运行,如果它有5辆车,三个停车柱,两个粉红色的牙刷和爆炸式的自杀式腰带),以及周五下午带着一瓶龙舌兰酒的教授梦寐以求的所有其他奇怪而美妙的事物。