- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Producer-Consumer problem中,标准解决方案使用3个信号量。
但是,我想知道我们是否只能使用1个信号量:
semaphore mutex = 1
procedure producer() {
while (true) {
down(mutex)
if (bufferNotFull()) {
item = produceItem()
putItemIntoBuffer(item)
}
up(mutex)
}
}
procedure consumer() {
while (true) {
down(mutex)
if (bufferNotEmpty()) {
item = removeItemFromBuffer()
consumeItem(item)
}
up(mutex)
}
}
semaphore mutex = 1
semaphore fillCount = 0
semaphore emptyCount = BUFFER_SIZE
procedure producer() {
while (true) {
item = produceItem()
down(emptyCount)
down(mutex)
putItemIntoBuffer(item)
up(mutex)
up(fillCount)
}
}
procedure consumer() {
while (true) {
down(fillCount)
down(mutex)
item = removeItemFromBuffer()
consumeItem(item)
up(mutex)
up(emptyCount)
}
}
最佳答案
“标准解决方案”不必使用3个信号量。对于您只有一个生产者和一个消费者的情况,即使您链接的Wikipedia文章也有两种信号量解决方案:
semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space
procedure producer()
{
while (true)
{
item = produceItem();
down(emptyCount);
putItemIntoBuffer(item);
up(fillCount);
}
}
procedure consumer()
{
while (true)
{
down(fillCount);
item = removeItemFromBuffer();
up(emptyCount);
consumeItem(item);
}
}
具有单个信号量的解决方案并不是很好,因为它们在您实际需要时仅给您一个等待条件-“等待可用空间”和“等待项目”。您不能使用一个信号量来做到这两者。
关于multithreading - 生产者使用者同步只有1个信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496477/
我正在尝试使用包含 XPath 的选择器订阅 WebLogic JMS 消息。在 WebLogic 中,它是使用“JMS_BEA_SELECT”函数实现的。像这样的东西: session.creat
我想使用 sage 和外部 c 库。外部库已经具有用 cython 编写的 python 绑定(bind),并处理 python 的数字类和 gmp 整数之间的转换。 为了使其能够与 sage 一起使
我已经能够成功地使用 logman 来转储一些内核跟踪。但是,我希望能够以编程方式在我的应用程序中启用内核事件的实时消耗(主要是线程/进程创建/删除和文件 I/O)。完成此任务的最佳方法是什么? 最佳
我想在 FreeBSD 10.1 上编写一个 C 程序,使用 libdtrace 实现 DTrace 消费者。 我知道我需要先调用 dtrace_open() - 例如我找到了 this旧演示文稿,但
我正在尝试使用消息队列 (RabbitMQ) 在基于微服务的架构中处理请求授权。 根据这些 instructions,我已经将接收器和发送器配置为 .NET Core 中的控制台应用程序.但是,在实际
我遇到了一个场景,我必须让一个基于 Axis2 的 ws 消费者在 WebMethods 中作为 java 服务工作。我首先在 netbeans 中实现了 ws Consumer 只是为了看看它是否有
据我所知,Lambdas 用于监听事件并运行一段代码来响应这些事件。 事件必须是 AWS 服务或 HTTP 端点。 如果我有一个 RabbitMq 运行在 上的服务EC2 服务器 (不使用 SQS),
所以我正在构建一个使用 Ruby on Rails 前端和 Java 后端的 Web 应用程序。因此,基本上,当用户登录网站时,我希望在屏幕上显示该用户的所有交易数据历史记录的列表。 我需要执行此操作
我已经实现了一个 Java Servlet 过滤器,它使用 PF 提供的 Java API 从 PingFederate (PF) 服务器消耗 token 。这使得我的应用程序能够在 PF SSO 设
我有一个 WCF SOAP 使用者,它由 Visual Studio 2012 从 WSDL 实现。 WSDL 由 PeopleTools 生成。基础对象的类型为 System.ServiceMode
Oauth2 快把我逼疯了。 目前,我的 Rails 应用程序通过 Facebook 和其他 Oauth2 提供商对用户进行身份验证,这要归功于 Devise 和 OmniAuth 的美妙之处。用户无
我想获得一些关于在 Chrome 扩展和 Gmail 小工具中正确处理 Salesforce OAuth 消费者 key 和 secret 的想法。 Chrome 扩展程序本质上是用 zip 兼容格式
我正在使用 Express、Node 和 Google Drive API。我正在尝试使用 PDF 文件的 blob 响应对我的端点的 API 调用。但是当我从 Drive API 获取文件时我不想保
我是一名优秀的程序员,十分优秀!