问题标签 [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 回答
1158 浏览

concurrency - 测试和设置指令中的饥饿

GATE 考试中提出了以下问题:
用于实现流程关键部分的 enter_CS() 和 leave_CS() 函数使用 test-and-set 指令实现,如下所示:

在上述解决方案中,X 是与 CS 关联的内存位置,并被初始化为 0。现在考虑以下语句:
I. 上述 CS 问题的解决方案是无死锁
II。该解决方案是无饥饿的。
三、进程按 FIFO 顺序进入 CS。
IV 多个进程可以同时进入CS。
以上哪些说法是正确的?

正确答案是选项 I。
虽然 I 和 IV 选项对我来说很清楚,但我无法理解这里的饥饿是如何可能的。
如果有人可以帮我解释一下,那就太好了。谢谢。

0 投票
2 回答
4612 浏览

concurrency - Hoare Monitor 使用信号量实现?

这是我 4 天后的考试,我刚刚和我的讲师交谈,他对这部分讲座非常不清楚,我和很多学生一起努力理解这一点。

基本上,如果您想使用信号量实现 Hoare 监视器,所涉及的步骤顺序是什么?

下面是伪代码 在此处输入图像描述

一个[![][1]] 3

更新:

我现在开始明白了

所以第一张幻灯片是用于访问监视器的进程

如果你是唯一的,那么你调用 wait(mutex)

进入显示器做你的事情然后离开

如果有东西等待进入监视器,那么你就启动下一个信号量,即等待进入信号量的进程队列。否则,如果您是监视器中唯一的人,那么您退出并向上互斥体,以便其他人可以进入互斥体

对于带有等待(条件)和信号(条件)的第二张幻灯片

when u wait(c): c_count++ //等待此条件的进程数,加一 if(next_count>0) up(next) //如果希望进入监视器的等待进程数大于零, up(next),解除阻塞等待进程之一

else up(mutex) //如果你是唯一一个然后 up mutex 所以其他人进入 down(c_sem) //阻止你自己睡觉 c_count-- //你醒来所以等待这个条件的进程数量减少

对于信号(c)部分:

if(c_count>0) // 如果等待这个条件的进程数大于 0

next_counter++ //想要进入监视器的进程数增加一(c_sem);// 取消阻塞等待此条件的进程之一 down(next) //如果有可用位置,则关闭此位置,否则获取阻塞并加入等待进程的列表 next_count--; //你醒来并尝试进入显示器

0 投票
0 回答
1193 浏览

multithreading - c语言中的线程和信号量

早上好,我尝试使用信号量 c 库执行 2 个线程 t1 和 t2。我写了这段代码

代码工作没有错误,但我有 2 个线程进入临界区,我希望第一个线程显示 100 个值,线程 2 继续其他值直到 200。

0 投票
1 回答
1907 浏览

c - 在 C 中使用信号量控制线程顺序

我是 C 新手,我只是想运行 Pacheco 的书“并行编程简介”中的这段代码。而且我只是不知道应该如何在main(). 是&semaphores[dest]&semaphores[my_rank]数组吗?

C代码:

当我试图将输出数组写入文件时,我想实现这种类型的顺序机制。这是我的代码:

}

信号量的初始化main()

我也有它作为一个全局变量:

该程序编译,但它给了我这个错误:

任何帮助,将不胜感激。

0 投票
1 回答
442 浏览

c - 使用 C 中的线程编译代码“双重释放或损坏(输出)”时出错?

我正在尝试使用 pthreads 进行埃博拉病毒模拟。信号量部分一切正常。编译代码时出现此错误:

这是我的代码:

这是 timer.h 文件:

任何帮助,将不胜感激。谢谢

0 投票
3 回答
1077 浏览

c - Semaphore/Mutex 和 Printf 之间的同步

我正在为我的操作系统课程做一个关于信号量和同步的练习(见下面的粗体文本)。练习的文本是这样的:

Pthread 信号量和互斥量

C 程序 gen_binary_numbers.c 在命令行上接收一个整数 n,并使用递归生成并显示所有 n 位的二进制数。将递归程序转换为并发程序,将递归过程替换为生成适当数量的显示二进制数(以任何顺序)的进程。

这是我的代码,实际上:

我认为代码应该返回正确的解决方案,但有时输出不会返回正确的数字。

正确输出示例:

错误输出示例(由于重复):

我认为问题在于互斥锁和printf之间的同步。是否有替代解决方案来避免混淆结果?

0 投票
3 回答
2084 浏览

java - 如果 release() 在 acquire() 之前,二进制信号量不起作用

我正在编写一个测试代码,我发现如果我们在release()此之前放置acquire()二进制信号量功能就会被破坏。

我检查并发现超过一个线程通过acquire()并将计数增加到 N,其中 N 是线程数,因此与二进制信号量相矛盾。

有人可以解释这种行为吗?

0 投票
1 回答
1312 浏览

c - 如何使用信号量同步进程

假设我有 3 个进程,包括一个父进程,我必须按 P3、P1、P2 的顺序执行我的程序。伙计们请帮助我如何从进程 P3 开始计算。

我需要输出为 {0,1,2,3,4,5,.. max}

作为参考,我的代码快照是:-

当我运行程序时,我得到以下输出 {0,3,,6,1,4,7,2,5,8}

我需要一种方法,我的第一个进程应该打印一个数字,它应该让其他进程打印他的数字,最后三分之一应该打印。

我需要一种方法,让每个人都按顺序到达那里。

希望我对这个问题很清楚

0 投票
2 回答
2394 浏览

c - 使用二进制信号量实现计数信号量

我已经实现了某种用户级线程系统。我需要一些帮助来实现计数信号量,使用二进制信号量实现(如下所述的向上和向下函数)。这是我实现二进制信号量的接口:

这里是计数信号量接口的接口:

我试图做的是在 void up(structcounting_semaphore* sem) 处锁定值。但正如您在下面看到的那样,这还不够。我在有问题的情况下添加了评论。

0 投票
1 回答
295 浏览

concurrency - 使用二进制信号量用餐哲学家

这个伪代码能以最大的并行度解决哲学家进餐问题吗?这mutex是一个初始化为 1 的二进制信号量。假设分叉的编号从 0 到 (N-1)。从 0 到 (N-1) 共有 N 个哲学家。

这应该以最大的并行性解决哲学家进餐问题,因为在一位哲学家获得两个分叉后,锁就会被释放。但会吗?会不会有活力的问题?我很困惑。