Linux信号量(2)-POSIX 信号量( 二 )
结构体定义如下:
struct timespec {time_t tv_sec;/* Seconds */longtv_nsec;/* Nanoseconds [0 .. 999999999] */};
如果指定的阻塞时间到了 , 但是 sem 仍然小于 0, 则会返回一个错误 (错误设置为 ETIMEDOUT ) 。
post(V)post 为信号量值加一操作 , 函数原型如下:
#include int sem_post(sem_t *sem);Link with -pthread.返回值:若成功 , 返回 0 ;若出错 , 返回-1
无名信号量接口函数信号量的函数都以sem_开头 , 线程中使用的基本信号函数有4个 , 他们都声明在头文件semaphore.h中 , 该头文件定义了用于信号量操作的sem_t类型:
sem_init
该函数用于创建信号量 , 原型如下:
int sem_init(sem_t *sem, int pshared, unsigned int value);
功能:该函数初始化由sem指向的信号对象 , 设置它的共享选项 , 并给它一个初始的整数值 。 pshared控制信号量的类型 , 如果其值为0 , 就表示信号量是当前进程的局部信号量 , 否则信号量就可以在多个进程间共享 , value为sem的初始值 。 返回值:该函数调用成功返回0 , 失败返回-1 。
sem_destroy
该函数用于对用完的信号量进行清理 , 其原型如下:
int sem_destroy(sem_t *sem);
返回值:
成功返回0 , 失败返回-1 。
sem_getvalue函数
该函数返回当前信号量的值 , 通过restrict输出参数返回 。 如果当前信号量已经上锁(即同步对象不可用) , 那么返回值为0 , 或为负数 , 其绝对值就是等待该信号量解锁的线程数 。
int sem_getvalue(sem_t *restrict, int *restrict);
使用实例
【实例1】:
#include #include #include
【实例2】:
#include #include #include
- 近期浙江引来这么多重磅级“帮手”传递什么信号?
- Linux Kernel 5.10.5发布:禁用FBCON加速滚动特性
- Linux 5.11开始围绕PCI Express 6.0进行早期准备
- Fedora正在寻求协助 希望加快Linux 5.10 LTS内核测试进度
- iPhone 12信号差真实原因曝光:不是基带问题
- Linux Mint 20.1 Ulyssa稳定版已确定延期至2021年初发布
- 英特尔Xe GPU在Linux 5.11上的性能表现不错
- iPhone12 重现iPhone 7“信号门”,但库克沉默
- MIPS架构厂商日渐式微 Linux报告其漏洞遭遇困难
- 将要报废的手机会出现这三个信号,你出现了吗?