C 如何使用信号量同步两个进程
我被要求同步共享内存中共享一个整数的两个进程。同步是通过一个信号量来完成的 第一个进程以2到10的步骤从2开始递增整数,因为整数是0 mod 5,所以它应该阻塞,允许第二个进程继续递增相同的整数,但这次是3,并且在整数是0 mod 5时停止;然后一路循环。直到100C 如何使用信号量同步两个进程,c,linux,process,semaphore,C,Linux,Process,Semaphore,我被要求同步共享内存中共享一个整数的两个进程。同步是通过一个信号量来完成的 第一个进程以2到10的步骤从2开始递增整数,因为整数是0 mod 5,所以它应该阻塞,允许第二个进程继续递增相同的整数,但这次是3,并且在整数是0 mod 5时停止;然后一路循环。直到100 我写了这段代码,我不确定我是否能成功地写V(s)和p(s) 第一道工序 #定义键100 #定义键200 main() { int s,idm,*n=0; idm=shmget(键,sizeof(int),ipc-creat | 06
我写了这段代码,我不确定我是否能成功地写V(s)和p(s) 第一道工序
#定义键100
#定义键200
main()
{
int s,idm,*n=0;
idm=shmget(键,sizeof(int),ipc-creat | 0666);
creat-sem(键);
init-sem(idm,0,0);
n=(int*)shmat(idm,0,0);
而(*n<100)
{
*n+=2;
printf(%d,*n);
如果(*n%5==0)
{
五(s);
P(s),;
}
shmdt(n);
}
第二道工序
#定义键100
#定义键200
main()
{
int s,idm,*n=0;
idm=shmget(键,尺寸(int),ipc-不包括| 0666);
creat-sem(键);
init-sem(idm,0,0);
n=(int*)shmat(idm,0,0);
P(s),;
而(*n<100)
{
*n+=3;
printf(%d,*n);
如果(*n%5==0)
{
五(s);
P(s),;
}
shmdt(n);
smctl(idm,IPC-RMID,0);
}
@pjtrail嘿,你的编辑很好,但是不要在结尾加上“希望我的编辑有帮助!”如果你想这样做,请留下评论。你认为create-sem(键);
应该是create\u sem(键)
?发布真实代码!编造的带有不可编译错误的代码没有帮助-你会得到大量的评论而不是答案!你使用的是什么信号接口或平台?我无法从代码中识别。“我不确定是否能成功编写V(s)和P(s)。”很公平。你已经试了几个小时了-怎么样?@pjtrail嘿,你的编辑很好,但不要在结尾加上“希望我的编辑有帮助!”如果你想这样做,请留下评论。你认为create-sem(键);
应该是create\u sem(键)吗
?发布真实代码!编造的带有不可编译错误的代码没有帮助-你会得到大量的评论而不是答案!你使用的是什么信号接口或平台?我无法从代码中识别。“我不确定是否能成功编写V(s)和P(s)。”很公平。你已经试了几个小时了-怎么样?@pjtrail嘿,你的编辑很好,但不要在结尾加上“希望我的编辑有帮助!”如果你想这样做,请留下评论。你认为create-sem(键);
应该是create\u sem(键)吗
?发布真实代码!编造的带有不可编译错误的代码没有帮助-你会得到大量的评论而不是答案!你使用的是什么信号接口或平台?我无法从代码中识别。“我不确定是否能成功编写V(s)和P(s)。”很公平。你已经有几个小时的时间去尝试了——进展如何?
#define keys 100
#define key 200
main()
{
int s, idm, *n = 0;
idm = shmget(key, sizeof(int), ipc - creat | 0666);
creat - sem(keys);
init - sem(idm, 0, 0);
n = (int *)shmat(idm, 0, 0);
while (*n < 100)
{
*n += 2;
printf(% d, *n);
if (*n % 5 == 0)
{
V(s);
P(s);
}
shmdt(n);
}
#define keys 100
#define key 200
main()
{
int s, idm, *n = 0;
idm = shmget(key, sizeof(int), ipc - EXCL | 0666);
creat - sem(keys);
init - sem(idm, 0, 0);
n = (int *)shmat(idm, 0, 0);
P(s);
while (*n < 100)
{
*n += 3;
printf(% d, *n);
if (*n % 5 == 0)
{
V(s);
P(s);
}
shmdt(n);
smctl(idm, IPC - RMID, 0);
}