信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区。
需要包含头文件semaphore.h。
主要用到的函数:
int sem_init(sem_t *sem, int pshared, unsigned int value);
,其中sem
是要初始化的信号量,pshared
表示此信号量是在进程间共享还是线程间共享,value是信号量的初始值。int sem_destroy(sem_t *sem);
,其中sem
是要销毁的信号量。只有用sem_init
初始化的信号量才能用sem_destroy
销毁。int sem_wait(sem_t *sem);
等待信号量,如果信号量的值大于0,将信号量的值减1,立即返回。如果信号量的值为0,则线程阻塞。相当于P操作。成功返回0,失败返回-1。int sem_post(sem_t *sem);
释放信号量,让信号量的值加1。相当于V操作。
其他说明