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

时间:2015-06-13 11:58:50

标签: c linux process semaphore

我被要求同步共享内存中共享整数的2个进程。同步将使用信号量完成。

第一个进程开始以2为单位从2向上递增整数2,当它应该阻塞因为整数是0 mod 5,允许第二个进程继续递增相同的整数但是这次为3,并且还停止当整数为0 mod 5时;然后它一直循环。直到100

我写了这段代码,我不确定能否成功写出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);
    }

0 个答案:

没有答案