问题标签 [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 投票
2 回答
272 浏览

operating-system - 在代码中使用二进制信号量

某个计算会生成两个数组ab这样
a[i]=f(i) for 0 ≤ i < n and b[i] = g(a[i]) for 0 ≤ i < n。假设这个计算被分解成两个并发进程,X计算数组并​​计算数组。这些过程使用两个二进制信号量和,都初始化为零。该数组由两个进程共享。进程的结构如下所示。YXaYbRSa

以下哪一项代表 和 的正确ExitX实现EntryY

(一个)

(乙)

(C)

(四)

我相信答案应该是(B),因为在Y执行关键部分之前不应该执行进程中的关键部分Xa[i]首先填充,必须用于b[i]),所以之后X执行然后根据选项(B)在Y我们会发现临界区的入口R=1S=1所以现在临界区Y就可以执行了。

问题:正确答案是(C),我错在哪里?

0 投票
1 回答
7392 浏览

c - futex 工具返回了意外的错误代码并已中止

我正在尝试使用信号量解决哲学家就餐问题。哲学家先拿起左叉子,然后拿起右叉子,吃完后放下。我正在使用 5 个线程来实现这一点,每个线程一个用于每个哲学家,5 个信号量一个用于每个筷子。需要由父节点执行死锁检查,如果发现则打破死锁。当我只是运行哲学家思考和饮食的循环时,程序会因错误而崩溃 The futex facility returned an unexpected error code.Aborted。我没有得到有关如何调试此错误的任何信息。

哲学家的线索如下

}

主程序如下

如何调试此错误。我也在粘贴一次运行的输出

还有一个问题,如您所见,哲学家 0 和 2 没有互动,为什么会发生这种情况。

在 GDB 中运行它我得到了这个信息

0 投票
1 回答
111 浏览

mutex - 避免花很长时间来完成“牛奶过多”的场景

以下是“牛奶过多问题”的简单解决方案

问题是,action-1 可能需要很长时间才能完成,使得任何等待获取互斥锁的进程都等待很长时间。

避免这种情况的一种方法是设置一个计时器,以便一旦计时器关闭,购买牛奶的过程将返回有或没有牛奶。如您所见,这样做存在问题。(例如:无法确定该过程是否已经购买了牛奶并在回家的路上)

有没有更好的解决方案?

编辑牛奶过多的问题

0 投票
1 回答
107 浏览

c - 我想解决二进制信号量的读者/作者问题

我有5个作家,20个读者。我想用二进制信号量解决读写器问题。

但是我的代码有问题。存在分段错误(核心转储)。我认为创建线程时存在问题。我该如何解决这个问题?这是解决读写问题的正确代码吗?我使用了教科书的伪代码。

0 投票
1 回答
63 浏览

java - Java:陷入无限循环

我只想在我的服务完全停止时才做事。

所以我做了一个公共静态变量,将其初始化为 false、in onCreate()、true 和 in onDestroy()、false。

在我的活动中:

在我的服务中:

现在,当我的服务运行时,应用程序收到 NOT RESPONDING 消息。

0 投票
1 回答
277 浏览

c++ - 如何用一个信号量同步 3 个进程?

我收到了一项任务,用一个信号量同步 3 个任务。

前两个任务生成随机数,第三个任务打印其总和。

所以前两个任务应该在开始时执行,第三个任务应该在最后执行。到目前为止,下面的代码给了我最接近我想要实现的结果,但是它显然不时会陷入僵局,我无法找到一种仅用一个信号量来解决这个问题的方法:(

0 投票
1 回答
274 浏览

multithreading - 互斥量和二进制信号量之间的实际区别

所以,上周,我在研究 Mutex 和 Semaphores。我来发现这篇文章真的帮助我弄清楚信号量是什么。现在我明白了二进制信号量和互斥量之间的理论区别是什么,我仍然想知道如何实际使用它们。我目前正在使用 C#,但我找不到在这种语言中使用二进制信号量的任何方法。

有人可以发布有关如何使用二进制信号量与互斥量的任何(简单)代码示例吗?任何广泛使用的语言都可以完成这项工作。您甚至可以发布 Powershell/Bash 脚本。

0 投票
0 回答
47 浏览

multithreading - 操作问题 qustions - 以上代码的线程、进程等:

问题:在 ex1.c (6.1) 中,以下哪些属性实现了:

(一)互斥而不进步

(二)进步而不是相互排斥

(3) 既不互斥也不进步

(四)互斥与进步并重

请解释?

1.2

哪些论点(在 6.1 中)是正确的,哪些不正确:

(1) 总是退出。当线程 = 2 或线程 <= 0

(2) 总是挂起。线程 = 1 或线程 > 2

任何帮助将不胜感激

0 投票
1 回答
479 浏览

multithreading - 在多线程环境中在 sem_wait 之前调用 sem_post

对于基于二进制信号量的实现,该sem_post()函数的行为尚不清楚。

sem_wait()打电话后打电话会发生什么sem_post()。它会起作用吗。

代码示例:

线程 1:

线程 2:

在这里,如果sem_post()在调用 to 之前调用了一些方法sem_wait(),它会起作用吗?还是有必要sem_wait()在之前调用sem_post()

0 投票
1 回答
30 浏览

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.

如果在这种情况下一个进程可以独占信号量,那么在平等执行的情况下不能说同样的话吗?从这个意义上说,是什么让这些不同?