多线程编程指南

sem_init 语法

int	sem_init(sem_t *sem, int pshared, unsigned int value);
#include <semaphore.h>



sem_t sem;

int pshared;

int ret;

int value;



/* initialize a private semaphore */

pshared = 0;

value = 1;

ret = sem_init(&sem, pshared, value); 

如果 pshared 的值为零,则不能在进程之间共享信号。如果 pshared 的值不为零,则可以在进程之间共享信号。对于 Solaris 线程,请参见sema_init 语法

多个线程决不能初始化同一个信号。

不得对其他线程正在使用的信号重新初始化。

初始化进程内信号

pshared 为 0 时,信号只能由该进程内的所有线程使用。

#include <semaphore.h>



sem_t sem;

int ret;

int count = 4;



/* to be used within this process only */

ret = sem_init(&sem, 0, count); 

初始化进程间信号

pshared 不为零时,信号可以由其他进程共享。

#include <semaphore.h>



sem_t sem;

int ret;

int count = 4;



/* to be shared among processes */

ret = sem_init(&sem, 1, count);