因为线程linux还没有实现进程间的通信,所以在int sem_init(sem_t *sem, int pshared, unsigned int value)的第二个参数要为0,
而且在多线程间的同步是可以通过有名信号量也可通过无名信号,但是一般情况线程的同步是无名信号量,
无名信号量使用简单,而且sem_t存储在进程空间中,有名信号量必须LINUX内核管理,由内核结构struct ipc_ids存储,是随内核持续的,系统关闭,信号量则删除,当然也可以显示删除,通过系统调用删除,
消息队列,信号量,内存共享,这几个都是一样的原理。,只不过信号量分为有名与无名
无名使用 ,
有名信号量
无名信号量不能用进程间通信,
无名与有名的区别,有名需要KEY值与IPC标识,所以sem_init的第二个参数必须为0
无名信号量参考:C语言多线程编程 semaphore 信号量(信号灯)是什么?如何使用?(本文讲解无名信号量,进程内)
有名信号量参考:Linux C语言进程间通信 信号量(semaphore)(进程间共享内存方式)(有名信号量)