sem线程信号量
线程信号量使用步骤:
(1)定义信号量集合(如:sem_t sem[3]);
注:线程信号量集合其实就是一个数组,数组每个元素就是一个信号量。
(2)初始化集合中的每个信号量;
(3)p、v操作;
(4)进程结束时,删除线程信号量集合。
1、sem_init初始化信号量
1、头文件:#include <semaphore.h>
2、函数原型:int sem_init(sem_t *sem, int pshared, unsigned int value);
3、函数形参:sem:信号量集合中的某个信号量地址;
pshared:若为0:给线程使用 / 若为非0:可以给进程使用;
value:初始化值。
注:pshared:通常不用!0值。对于进程来说,更多的还是使用进程信号量,因为线程信号量用到进程上时,存在一些不稳定的情况。
4、函数返回值:成功返回0,失败返回-1,errno被设置。
2、sem_wait信号量操作
1、P操作
(1)头文件:#include <semaphore.h>
(2)函数原型:int sem_wait(sem_t *sem);//阻塞p操作
(3)函数形参:sem:信号量集合中的某个信号量地址;
(4)函数返回值:成功返回0,失败返回-1,errno被设置。
(5)功能:阻塞p操作集合中某个信号量,信号量的值-1。
如果能够p操作成功最好,否则就阻塞直到p操作操作成功为止。
(6)使用示例:sem_wait(&sem[0]);
2、V操作
(1)头文件:#include <semaphore.h>
(2)函数原型:int sem_post(sem_t *sem);
(3)函数形参:sem:信号量集合中的某个信号量地址;
(4)函数返回值:成功返回0,失败返回-1,errno被设置。
(5)功能:v操作成功后,信号量的值+1。
对某个信号量进行v操作,v操作不存在阻塞问题。
(6)使用示例:sem_post(&sem[0]);
sem线程信号量
最新推荐文章于 2024-07-05 22:08:04 发布