Linux信号量实现(c)

代码:

#include<semaphore.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<sys/ipc.h>

int main(int argc,char **argv)
{
    int pid;
    sem_t *sem;
    const char sem_name[]="mysem";

    pid=fork();

    if(pid<0)
    {
        printf("Error in the fork\n");
    }
    else if(pid==0)
    {
        sem=sem_open(sem_name,O_CREAT,0644,1);//creat
        if(sem==SEM_FAILED)
        {
            printf("unable to create semaphore...\n");
            sem_unlink(sem_name);//delete
            exit(-1);
        }
        sem_wait(sem);//P
        for(int i=0;i<3;i++)
        {
            printf("Child process run:%d\n",i);
            sleep(1);
        }
        sem_post(sem);//V
    }
    else
    {
        sem=sem_open(sem_name,O_CREAT,0644,1);//create
                if(sem==SEM_FAILED)
                {       
                        printf("unable to create semaphore...\n");
                        sem_unlink(sem_name);//delete
                        exit(-1);
                }
                sem_wait(sem);//P
                for(int i=0;i<3;i++)
                {
                        printf("Parent process run:%d\n",i);
                        sleep(1);
                }
                sem_post(sem);//V
        wait(NULL);
        sem_close(sem);//close
        sem_unlink(sem_name);
    }
    return 0;
}

运行结果:

 

posted @ 2023-10-12 18:22  44556677  阅读(32)  评论(0)    收藏  举报