问题标签 [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.
operating-system - 在代码中使用二进制信号量
某个计算会生成两个数组a
,b
这样
a[i]=f(i) for 0 ≤ i < n and b[i] = g(a[i]) for 0 ≤ i < n
。假设这个计算被分解成两个并发进程,X
计算数组并计算数组。这些过程使用两个二进制信号量和,都初始化为零。该数组由两个进程共享。进程的结构如下所示。Y
X
a
Y
b
R
S
a
以下哪一项代表 和 的正确ExitX
实现EntryY
?
(一个)
(乙)
(C)
(四)
我相信答案应该是(B),因为在Y
执行关键部分之前不应该执行进程中的关键部分X
(a[i]
首先填充,必须用于b[i]
),所以之后X
执行然后根据选项(B)在Y
我们会发现临界区的入口R=1
,S=1
所以现在临界区Y
就可以执行了。
问题:正确答案是(C),我错在哪里?
c - futex 工具返回了意外的错误代码并已中止
我正在尝试使用信号量解决哲学家就餐问题。哲学家先拿起左叉子,然后拿起右叉子,吃完后放下。我正在使用 5 个线程来实现这一点,每个线程一个用于每个哲学家,5 个信号量一个用于每个筷子。需要由父节点执行死锁检查,如果发现则打破死锁。当我只是运行哲学家思考和饮食的循环时,程序会因错误而崩溃
The futex facility returned an unexpected error code.Aborted
。我没有得到有关如何调试此错误的任何信息。
哲学家的线索如下
}
主程序如下
如何调试此错误。我也在粘贴一次运行的输出
还有一个问题,如您所见,哲学家 0 和 2 没有互动,为什么会发生这种情况。
在 GDB 中运行它我得到了这个信息
mutex - 避免花很长时间来完成“牛奶过多”的场景
以下是“牛奶过多问题”的简单解决方案
问题是,action-1 可能需要很长时间才能完成,使得任何等待获取互斥锁的进程都等待很长时间。
避免这种情况的一种方法是设置一个计时器,以便一旦计时器关闭,购买牛奶的过程将返回有或没有牛奶。如您所见,这样做存在问题。(例如:无法确定该过程是否已经购买了牛奶并在回家的路上)
有没有更好的解决方案?
编辑:牛奶过多的问题
c - 我想解决二进制信号量的读者/作者问题
我有5个作家,20个读者。我想用二进制信号量解决读写器问题。
但是我的代码有问题。存在分段错误(核心转储)。我认为创建线程时存在问题。我该如何解决这个问题?这是解决读写问题的正确代码吗?我使用了教科书的伪代码。
java - Java:陷入无限循环
我只想在我的服务完全停止时才做事。
所以我做了一个公共静态变量,将其初始化为 false、in onCreate()
、true 和 in onDestroy()
、false。
在我的活动中:
在我的服务中:
现在,当我的服务运行时,应用程序收到 NOT RESPONDING 消息。
c++ - 如何用一个信号量同步 3 个进程?
我收到了一项任务,用一个信号量同步 3 个任务。
前两个任务生成随机数,第三个任务打印其总和。
所以前两个任务应该在开始时执行,第三个任务应该在最后执行。到目前为止,下面的代码给了我最接近我想要实现的结果,但是它显然不时会陷入僵局,我无法找到一种仅用一个信号量来解决这个问题的方法:(
multithreading - 互斥量和二进制信号量之间的实际区别
所以,上周,我在研究 Mutex 和 Semaphores。我来发现这篇文章真的帮助我弄清楚信号量是什么。现在我明白了二进制信号量和互斥量之间的理论区别是什么,我仍然想知道如何实际使用它们。我目前正在使用 C#,但我找不到在这种语言中使用二进制信号量的任何方法。
有人可以发布有关如何使用二进制信号量与互斥量的任何(简单)代码示例吗?任何广泛使用的语言都可以完成这项工作。您甚至可以发布 Powershell/Bash 脚本。
multithreading - 操作问题 qustions - 以上代码的线程、进程等:
问题:在 ex1.c (6.1) 中,以下哪些属性实现了:
(一)互斥而不进步
(二)进步而不是相互排斥
(3) 既不互斥也不进步
(四)互斥与进步并重
请解释?
1.2
哪些论点(在 6.1 中)是正确的,哪些不正确:
(1) 总是退出。当线程 = 2 或线程 <= 0
(2) 总是挂起。线程 = 1 或线程 > 2
任何帮助将不胜感激
multithreading - 在多线程环境中在 sem_wait 之前调用 sem_post
对于基于二进制信号量的实现,该sem_post()
函数的行为尚不清楚。
sem_wait()
打电话后打电话会发生什么sem_post()
。它会起作用吗。
代码示例:
线程 1:
线程 2:
在这里,如果sem_post()
在调用 to 之前调用了一些方法sem_wait()
,它会起作用吗?还是有必要sem_wait()
在之前调用sem_post()
?
operating-system - 二进制信号量如何实现平等的执行和饥饿?
在我引用的以下示例中,我对如何使用两个二进制信号量 Q 和 S 来保证平等执行并造成饥饿的可能性感到困惑。
在中间示例中保证平等执行的理由是:
The second guarantees equal shares since the process that holds both Q and S will give up S to the other process before it releases Q and goes back to the top of the loop.
我真的不明白“放弃 S 到另一个过程”是什么意思。S不只是一个要递增和递减的值吗?P1 将在 S 发出信号后运行的想法来自哪里?
第三种情况的解释对我来说也没有任何意义,他说:
The third is subject to starvation, since it's possible for one process to run slightly faster than the other and monopolize the semaphores.
如果在这种情况下一个进程可以独占信号量,那么在平等执行的情况下不能说同样的话吗?从这个意义上说,是什么让这些不同?