ubuntu环境下的PV原语中的互斥
											
程序代码:
#include <stdio.h>
#include <sys/sem.h>
#include <unistd.h>
int p(int semid)
{
    struct sembuf sops;
    sops.sem_op = -1;
    sops.sem_num = 0;
    sops.sem_flg = SEM_UNDO;
    semop(semid, &sops, 1);
    return 0;
}
int v(int semid)
{
    struct sembuf sops;
    sops.sem_op = +1;
    sops.sem_num = 0;
    sops.sem_flg = SEM_UNDO;
    semop(semid, &sops, 1);
    return 0;
}
int sem_init(int semid, int val)
{
    int ret;
    ret = semctl(semid, 0, SETVAL, val);
    return 0;
}
int mutual_exclusive()
{
    int ret;
    int semid;
    pid_t pid;
    semid = semget(IPC_PRIVATE, 1, IPC_CREAT);
    if (semid < 0) {
        perror("semget");
        return -1;
    }
    ret = sem_init(semid, 1);
    if (ret < 0) {
        perror("semctl");
        return -1;
    }
    printf("%d\n", semctl(semid, 0, GETVAL));
    pid = fork();
    if (pid < 0) {
        perror("fork");
        return -1;
    }
    if (pid == 0) {
        while(1) {
            p(semid);
            printf("this is child1\n");
            printf("this is child2\n");
            printf("this is child3\n");
            v(semid);
        }
    } else {
        while(1) {
            p(semid);
            printf("this is parent1\n");
            printf("this is parent2\n");
            printf("this is parent3\n");
            v(semid);
        }
    }
    return 0;
}
int main()
{
    mutual_exclusive();
    return 0;
}
我想要的结果是输出child和parent是3个为一组的输出,但是结果是交叉输出的,没看出问题所在,求指教,谢了



											

	    

	

