我想模拟信号量(等待和信号过程),消息只是以算法的形式传递(而不是代码)。
任何人都可以帮助我......?
答案 0 :(得分:2)
您是否需要了解实现关键部分和信号量原语的算法?见Process Synchronization(pdf)。请注意,有时您可能会看到使用关键部分实现的信号量,以确保测试 - 修改操作的原子性。
消息队列建立在同步原语之上。您寻求的消息队列位于优秀Little Book of Semaphores(pdf)的第4章中。
已编辑添加:
我必须猜出“邮箱”是什么意思,所以如果这个答案不好,那么定义一个邮箱是有帮助的。我是否理解该练习是通过使用高级同步机制(如消息队列)来实现P和V?由于消息队列必须受到并发问题的保护,这是一个简单的练习。
给定一个类邮箱,它保证是线程安全的并且具有以下方法:
然后信号量类会有这些方法:
initialize(count):
mailbox = Mailbox.new
count.times do
v
v:
mailbox.enqueue(any_message)
p:
mailbox.dequeue
any_message是任何消息。它是什么并不重要,因为我们只使用消息队列来唤醒被阻塞的线程。
此算法模拟不能具有负值的信号量。可以使用负值创建的信号量需要做更多的工作。你需要哪个?