问题标签 [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.
concurrency - 测试和设置指令中的饥饿
GATE 考试中提出了以下问题:
用于实现流程关键部分的 enter_CS() 和 leave_CS() 函数使用 test-and-set 指令实现,如下所示:
在上述解决方案中,X 是与 CS 关联的内存位置,并被初始化为 0。现在考虑以下语句:
I. 上述 CS 问题的解决方案是无死锁
II。该解决方案是无饥饿的。
三、进程按 FIFO 顺序进入 CS。
IV 多个进程可以同时进入CS。
以上哪些说法是正确的?
正确答案是选项 I。
虽然 I 和 IV 选项对我来说很清楚,但我无法理解这里的饥饿是如何可能的。
如果有人可以帮我解释一下,那就太好了。谢谢。
concurrency - Hoare Monitor 使用信号量实现?
这是我 4 天后的考试,我刚刚和我的讲师交谈,他对这部分讲座非常不清楚,我和很多学生一起努力理解这一点。
基本上,如果您想使用信号量实现 Hoare 监视器,所涉及的步骤顺序是什么?
] 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--; //你醒来并尝试进入显示器
multithreading - c语言中的线程和信号量
早上好,我尝试使用信号量 c 库执行 2 个线程 t1 和 t2。我写了这段代码
代码工作没有错误,但我有 2 个线程进入临界区,我希望第一个线程显示 100 个值,线程 2 继续其他值直到 200。
c - 在 C 中使用信号量控制线程顺序
我是 C 新手,我只是想运行 Pacheco 的书“并行编程简介”中的这段代码。而且我只是不知道应该如何在main()
. 是&semaphores[dest]
和&semaphores[my_rank]
数组吗?
C代码:
当我试图将输出数组写入文件时,我想实现这种类型的顺序机制。这是我的代码:
}
信号量的初始化main()
:
我也有它作为一个全局变量:
该程序编译,但它给了我这个错误:
任何帮助,将不胜感激。
c - 使用 C 中的线程编译代码“双重释放或损坏(输出)”时出错?
我正在尝试使用 pthreads 进行埃博拉病毒模拟。信号量部分一切正常。编译代码时出现此错误:
这是我的代码:
这是 timer.h 文件:
任何帮助,将不胜感激。谢谢
c - Semaphore/Mutex 和 Printf 之间的同步
我正在为我的操作系统课程做一个关于信号量和同步的练习(见下面的粗体文本)。练习的文本是这样的:
Pthread 信号量和互斥量
C 程序 gen_binary_numbers.c 在命令行上接收一个整数 n,并使用递归生成并显示所有 n 位的二进制数。将递归程序转换为并发程序,将递归过程替换为生成适当数量的显示二进制数(以任何顺序)的进程。
这是我的代码,实际上:
我认为代码应该返回正确的解决方案,但有时输出不会返回正确的数字。
正确输出示例:
错误输出示例(由于重复):
我认为问题在于互斥锁和printf之间的同步。是否有替代解决方案来避免混淆结果?
java - 如果 release() 在 acquire() 之前,二进制信号量不起作用
我正在编写一个测试代码,我发现如果我们在release()
此之前放置acquire()
二进制信号量功能就会被破坏。
我检查并发现超过一个线程通过acquire()
并将计数增加到 N,其中 N 是线程数,因此与二进制信号量相矛盾。
有人可以解释这种行为吗?
c - 如何使用信号量同步进程
假设我有 3 个进程,包括一个父进程,我必须按 P3、P1、P2 的顺序执行我的程序。伙计们请帮助我如何从进程 P3 开始计算。
我需要输出为 {0,1,2,3,4,5,.. max}
作为参考,我的代码快照是:-
当我运行程序时,我得到以下输出 {0,3,,6,1,4,7,2,5,8}
我需要一种方法,我的第一个进程应该打印一个数字,它应该让其他进程打印他的数字,最后三分之一应该打印。
我需要一种方法,让每个人都按顺序到达那里。
希望我对这个问题很清楚
c - 使用二进制信号量实现计数信号量
我已经实现了某种用户级线程系统。我需要一些帮助来实现计数信号量,使用二进制信号量实现(如下所述的向上和向下函数)。这是我实现二进制信号量的接口:
这里是计数信号量接口的接口:
我试图做的是在 void up(structcounting_semaphore* sem) 处锁定值。但正如您在下面看到的那样,这还不够。我在有问题的情况下添加了评论。
concurrency - 使用二进制信号量用餐哲学家
这个伪代码能以最大的并行度解决哲学家进餐问题吗?这mutex
是一个初始化为 1 的二进制信号量。假设分叉的编号从 0 到 (N-1)。从 0 到 (N-1) 共有 N 个哲学家。
这应该以最大的并行性解决哲学家进餐问题,因为在一位哲学家获得两个分叉后,锁就会被释放。但会吗?会不会有活力的问题?我很困惑。