Linux C语言无名信号量与有名信号量(无名使用 <semaphore.h>,有名信号量<sys/sem.h>)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux C语言无名信号量与有名信号量(无名使用 <semaphore.h>,有名信号量<sys/sem.h>)相关的知识,希望对你有一定的参考价值。
文章目录
信号量在进程是以有名信号量进行通信的,在线程是以无名信号进行通信的
因为线程linux还没有实现进程间的通信,所以在int sem_init(sem_t *sem, int pshared, unsigned int value)
的第二个参数要为0,
而且在多线程间的同步是可以通过有名信号量也可通过无名信号,但是一般情况线程的同步是无名信号量,
无名信号量使用简单,而且sem_t存储在进程空间中,有名信号量必须LINUX内核管理,由内核结构struct ipc_ids
存储,是随内核持续的,系统关闭,信号量则删除,当然也可以显示删除,通过系统调用删除,
消息队列,信号量,内存共享,这几个都是一样的原理。,只不过信号量分为有名与无名
无名使用 <semaphore.h>
,
有名信号量<sys/sem.h>
无名信号量不能用进程间通信,
无名与有名的区别,有名需要KEY值与IPC标识,所以sem_init的第二个参数必须为0
无名信号量(进程内)<semaphore.h>
无名信号量参考:C语言多线程编程 semaphore 信号量(信号灯)是什么?如何使用?(本文讲解无名信号量,进程内)
有名信号量(进程间)<sys/sem.h>
有名信号量参考:Linux C语言进程间通信 信号量(semaphore)(进程间共享内存方式)(有名信号量)
参考文章
以上是关于Linux C语言无名信号量与有名信号量(无名使用 <semaphore.h>,有名信号量<sys/sem.h>)的主要内容,如果未能解决你的问题,请参考以下文章
Linux C语言进程间通信 信号量(semaphore)(进程间共享内存方式)(有名信号量)(跟无名信号量 进程内 用法不太一样)
Linux C语言进程间通信 信号量(semaphore)(进程间共享内存方式)(有名信号量)(跟无名信号量 进程内 用法不太一样)