Linux 信号量使用方法
信号量和互斥锁(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操作。 //用户从终端输入任意字符然后统计个数显示,输入end则结束 //使用多线程实现:主线程获取用户输入并判断是否退出,子线程计数 #include<stdio.h> #include <pthread.h> #include<stdlib.h> #include <string.h> #include