问题标签 [binary-semaphore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
80 浏览

java - 多线程二进制信号量:交替输出

  1. 目标是让输出字符串由 W、X、y
    和 z 组成。
  2. W 和 X 应该交替,并且 W 必须始终在 X 之前。y 和 z 必须与 y 交替,并且始终在 z 之前。
  3. y 和 z 的总和必须小于输出中任何给定点的 W 的数量。

到目前为止,我的程序满足前两点,但我在最后一点上遇到了麻烦。另外,我对信号量很陌生,想知道我实现的代码是否遵循良好的做法。例如,我最初将二进制信号量的初始值设置为 0,1,2,3,但为了满足第二个条件,将其更改为 0,1,0,1。

这是我的程序当前输出的示例: WXWyzXWXWXyzyWXWXzyzWXyzWXyzWX

0 投票
0 回答
90 浏览

synchronization - 在生产者-消费者问题中访问缓冲区时是否必须使用互斥锁?

以下是Galvin 等人给出的操作系统概念的生产者-消费者问题的伪代码。人。

我们假设池由n缓冲区组成,每个缓冲区都可以容纳一个项目。互斥二进制信号量为对缓冲池的访问提供互斥,并初始化为 value 1

下面是生产者结构的伪代码:

下面是消费者结构的伪代码:

以上是就正文而言。让我更进一步,包括缓冲区的工作。让char buffer[n]成为充当缓冲区的两个进程之间的共享数组。所以我们有:

尽管文本在访问缓冲区之前使用了互斥锁(根据他们的逻辑,由于缓冲区是共享项,因此应该以互斥方式访问),但我认为在访问缓冲区时使用互斥锁并不是绝对必要的。缓冲区元素,因为生产者和消费者虽然可以同时访问缓冲区,但我猜他们永远不能同时访问相同buffer数组位置。由于他们不能同时访问同一个位置,因此不可能出现竞争条件......

这就是我的感受。如果我错了,请纠正我。也请指出我犯错误的部分。谢谢你。

0 投票
1 回答
546 浏览

c++ - 无法在 Visual Studio 2019 和 2022 中使用 std::counting_semaphore

所以我试图在 Visual Studio 2019 和 2022 中使用counting_semaphore,但我得到的只是“std 没有成员counting_semaphore”。

在单个组件中添加了 clang 11 后,我在 Visual Studio 2019 中尝试了它,但我仍然遇到同样的错误。然后我就觉得它不支持 C++20。所以我想也许这就是它不起作用的原因。

然后我看到 Vs2022 Preview 支持 C++20。所以我安装了它,包括在内,但我仍然无法执行“std::counting_semaphore<5> slot(5);” 正如它所说的std没有一个叫做计数信号量的成员。

我还在 2022 预览版安装程序的各个组件中安装了 clang12,但我仍然没有让它工作。

我不确定我做错了什么。

我在网上看到例子:

https://www.modernescpp.com/index.php/semaphores-in-c-20 https://en.cppreference.com/w/cpp/thread/counting_semaphore

告诉如何使用它,但是当我将代码放入 vs 时,它就不起作用了。

我可以在#include 上执行“查看代码”,它显示了counting_semaphore 的实现,但我不能使用它!!!

请有人澄清我做错了什么!!!

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
34 浏览

operating-system - 二进制信号量如何保证互斥?

我刚刚读到二进制信号量保证互斥并且信号量可以被抢占。

二进制信号量的等待/关闭代码(取自https://www.javatpoint.com/os-binary-semaphore-or-mutex

那么如果一个进程 P1 正在运行并且它检查 down 函数中的条件并且即将将 s.value 的值更改为 0,但是在它之前它被抢占并且它的 PCB 被保存并且一个新进程 P2 开始运行它检查条件并将 s.value 更改为 0 并且其临界区开始。另一方面,如果 P2 进入 I/O 等待状态,则 P1 可能开始执行,因此两者都可能进入它们的临界区。那么如何保持互斥?

0 投票
0 回答
42 浏览

java - Java同步块/监视器与二进制信号量

我已经阅读了有关信号量的各种 帖子以及它们与互斥体的不同之处。在选择二进制信号量和同步块之间,我应该考虑哪些因素来做出决定?

问题陈述:https ://leetcode.com/problems/print-foobar-alternately/

方法一:

使用同步块的解决方案

方法二:

使用信号量的解决方案

问题:

  1. 在任何情况下使用一个与另一个可能会导致问题吗?
  2. 在“同步块”和二进制信号量之间做出决定时,我应该考虑或考虑什么?
  3. 有什么我应该遵循的最佳实践吗?任何可以帮助加深我对此知识的参考资料或链接?
0 投票
0 回答
22 浏览

binary - 操作系统:我的讲座开始了,但我无法写出要求我做的事情

编写一个程序,其中一个全局变量 count 被初始化为 0。然后,创建两个线程。在两个线程中,让有一个从 1 到 N 的循环,并在循环中增加计数。对于不同的 N 值(例如 N=10,000),尝试查看 count 是否等于 2N。对于每个 N,您应该多次运行您的程序。

评论你的结果。