使用信号量时没有输出

时间:2014-07-13 04:53:49

标签: synchronization semaphore

我想在项目中使用信号量,但我被困在这里。我写了三个程序,用于在所有三个程序的关键区域打印语句,以查看信号量如何进行同步。没有输出,程序进入睡眠状态。这是代码 -

    int main()
    {
        int fd,ret,kk,x=1,y=2;
        struct sembuf sem[2]={{0,-1,SEM_UNDO},
            {0,1,SEM_UNDO}};
        union semun a;
        a.val=1;
        kk=semget(1234,1,IPC_CREAT);
        semctl(kk,0,SETVAL);
        semop(kk,&sem[0],1);
        printf("In client1...\n");
        printf("In client1...\n");
        sleep(3);
        semop(kk,&sem[1],1);
    }

我制作了2份这个程序client2& client3。

1 个答案:

答案 0 :(得分:1)

根据您的代码sem[0]代表"发布id = 0&#34的信号量;并且sem[1]表示"等待id = 0"的信号量。通过做

semctl(kk,0,SETVAL);
semop(kk,&sem[0],1);

您正在尝试使用值0等待信号量。进行此操作将等到信号量的值大于0,在您的情况下永远不会为真。做

union semun semopts;
semopts.val = 1; 
semctl(kk,0,SETVAL, semopts);

在第一次使用信号量之前,应该解决您的问题。