首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用消息传递来模拟信号量.?

如何用消息传递来模拟信号量.?
EN

Stack Overflow用户
提问于 2009-12-31 21:21:47
回答 1查看 3.4K关注 0票数 5

我想要模拟信号量(等待和信号过程)与消息传递只是形式的算法(而不是代码)。

有人能帮我吗.

EN

回答 1

Stack Overflow用户

发布于 2010-01-01 00:11:12

您需要知道实现关键区段和信号量基元的算法吗?见进程同步 (pdf)。请注意,有时您可能会看到使用关键部分实现信号量,以确保测试-修改操作的原子性。

消息队列构建在同步原语之上。您所寻找的消息队列在优秀的小符号学 (pdf格式)第4章中。

编辑后添加:

我必须猜一猜你所说的“邮箱”是什么意思,所以如果这个答案不好的话,你可以定义邮箱是什么。我是否理解该练习是通过使用高级同步机制(如消息队列)来实现P和V?由于消息队列必须受到防止并发性问题的保护,所以这是一个简单的练习。

给定一个类邮箱,它保证线程安全,并且具有以下方法:

  • enqueue(邮件)-向邮箱添加一条消息。如果在dequeue中有任何线程被阻塞,请唤醒一个线程。
  • 去队列-从邮箱中删除一条消息,如果邮箱为空,则阻塞邮件。

然后信号量类将具有以下方法:

代码语言:javascript
复制
initialize(count):
  mailbox = Mailbox.new
  count.times do
    v

v:
  mailbox.enqueue(any_message)

p:
  mailbox.dequeue

any_message是任何消息。它是什么并不重要,因为我们只使用消息队列唤醒阻塞的线程。

该算法模拟一个不能有负值的信号量。可以用负值创建的信号量需要做更多的工作。你需要哪一个?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1987149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档