有界等待信号量
Bounded waiting with semaphores
有界等待标准的信号量有哪些实现方式?
我知道可以通过将等待信号量的进程列表维护为 FIFO 来遵循有界等待标准。
但是,是否有任何其他方法可以在不对所使用的列表类型施加任何限制的情况下执行此操作?
没有什么能阻止您构建您想要的任何类型的复杂生产者-消费者 class,但它可能很重要:
1) 使用互斥体来控制生产者和消费者线程对线程管理数据的访问。
2) 在互斥体内部,使用任何复杂的 algorithms/containers/whatever 来做 - 它在那里既安全又安全。
3) 如果一个线程随后发现由于某种原因它无法继续进行,它应该获得一个信号量,将其存储在管理数据中,退出互斥量并等待信号量。
4) 如果一个线程可能需要释放一些可能允许另一个线程 运行 的资源,它应该进入互斥体,分析管理数据,如果它发现 thread/s 可以现在允许 运行,在退出互斥量之前发出信号量。
请注意,这是 'My Weird Thread Locking/Management Requirement Thingy' 的通用解决方案。它涵盖了 madcademic wonderContainers,(你必须使用下面定义的可变几何,多级反馈超级队列。),疯狂的多资源约束,(线程 AB24 只能 运行 如果它有 5 辆汽车,三个停车位-护柱、两把粉红色牙刷和一条会爆炸的自杀腰带),以及教授们在周五下午用一瓶龙舌兰酒梦想的所有其他奇怪而美妙的东西。
有界等待标准的信号量有哪些实现方式?
我知道可以通过将等待信号量的进程列表维护为 FIFO 来遵循有界等待标准。 但是,是否有任何其他方法可以在不对所使用的列表类型施加任何限制的情况下执行此操作?
没有什么能阻止您构建您想要的任何类型的复杂生产者-消费者 class,但它可能很重要:
1) 使用互斥体来控制生产者和消费者线程对线程管理数据的访问。
2) 在互斥体内部,使用任何复杂的 algorithms/containers/whatever 来做 - 它在那里既安全又安全。
3) 如果一个线程随后发现由于某种原因它无法继续进行,它应该获得一个信号量,将其存储在管理数据中,退出互斥量并等待信号量。
4) 如果一个线程可能需要释放一些可能允许另一个线程 运行 的资源,它应该进入互斥体,分析管理数据,如果它发现 thread/s 可以现在允许 运行,在退出互斥量之前发出信号量。
请注意,这是 'My Weird Thread Locking/Management Requirement Thingy' 的通用解决方案。它涵盖了 madcademic wonderContainers,(你必须使用下面定义的可变几何,多级反馈超级队列。),疯狂的多资源约束,(线程 AB24 只能 运行 如果它有 5 辆汽车,三个停车位-护柱、两把粉红色牙刷和一条会爆炸的自杀腰带),以及教授们在周五下午用一瓶龙舌兰酒梦想的所有其他奇怪而美妙的东西。