linux线程通信信号以及进程通信信号

信号函数族

sem_init

sem_post

sem_wait

sem_destroy

通过信号和锁可以实现多线程通信及消息队列

进程间通信信号函数

semget

semctl

semop


if((m_semid=semget(key,1,IPC_CREAT|IPC_EXCL|0666))==-1)
        {
            m_semid = semget(key, 1, 0);
            if(m_semid == -1) return false;
        }
        else
        {
            semctl(m_semid,0,SETVAL,1);
        }


static int semaphore_p()
{
        //对信号量做减1操作,即等待P(sv)
        struct sembuf sem_b;
        sem_b.sem_num = 0;
        sem_b.sem_op = -1;//P()
        sem_b.sem_flg = SEM_UNDO;
        if(semop(sem_id, &sem_b, 1) == -1)
        {
                fprintf(stderr, "semaphore_p failed\n");
                return 0;
        }
        return 1;
}

static int semaphore_v()
{
        //这是一个释放操作,它使信号量变为可用,即发送信号V(sv)
        struct sembuf sem_b;
        sem_b.sem_num = 0;
        sem_b.sem_op = 1;//V()
        sem_b.sem_flg = SEM_UNDO;
        if(semop(sem_id, &sem_b, 1) == -1)
        {
                fprintf(stderr, "semaphore_v failed\n");
                return 0;
        }
        return 1;
}

你可能感兴趣的:(linux编程)