您的位置:首页 > 运维架构 > Linux

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

2015-09-02 09:36 435 查看
信号函数族

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: