
一.POSIX信号量
POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。但 POSIX可以用于线程间同步。
头文件:
cpp
#include <semaphore.h>
下面给大家介绍一下POSIX信号量的操作方法
1.初始化 sem_init
cpp
int sem_init(sem_t *sem, int pshared, unsigned int value);
参数:
-
sem:指向信号量对象的指针 -
pshared:-
0:线程间共享(同一进程) -
非0:进程间共享(需要共享内存区域)
-
-
value:信号量初始值(0 或正数)
返回值:
-
0:成功 -
-1:失败,设置errno
2. 销毁sem_destory
cpp
int sem_destroy(sem_t *sem);
参数:
sem:要销毁的信号量
返回值:
-
0:成功 -
-1:失败,设置errno
3. 等待(P操作,减1)
cpp
int sem_wait(sem_t *sem);
参数:
sem:信号量指针
返回值:
-
0:成功 -
-1:失败,设置errno
行为:
-
信号量值 > 0:减1,立即返回
-
信号量值 = 0:阻塞等待
4. 发布(V操作,加1)
cpp
int sem_post(sem_t *sem);
参数:
sem:信号量指针
返回值:
-
0:成功 -
-1:失败,设置errno
行为:
-
信号量值加1
-
如果有线程等待,唤醒其中一个