C 如何使用信号量同步两个进程

C 如何使用信号量同步两个进程,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

我被要求同步共享内存中共享一个整数的两个进程。同步是通过一个信号量来完成的

第一个进程以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 | 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);
    }