前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >信号量

信号量

作者头像
lexingsen
发布2022-02-25 08:33:01
4580
发布2022-02-25 08:33:01
举报
文章被收录于专栏:乐行僧的博客

头文件:include <semaphore.h> 主要的函数:

1.初始化信号量 函数原型:int sem_init(sem_t* sem,int pshared,unsigned int value) 参数: sem:指定是哪一个信号量 pshared:指定信号量的类型,值为0表示是在当前进程使用的局部信号量,否则该信号量就可以在多个进程中共享。 value:指定信号量的初始值,可以理解为最多由多少个线程可以访问共享资源。 返回值:

2.销毁信号量 函数原型:int sem_destroy(sem_t* sem) 函数功能:释放信号量占用的内核资源,注意不能释放正在被线程其他等待的信号量,否则会出现错误。 返回值:

3.加锁 函数原型:int sem_wait(sem_t* sem) 函数功能:对信号量的值value进行-1操作,相当于p操作。如果value的值为0,会发生阻塞。

4.尝试加锁 函数原型:int sem_trywait(sem_t* sem) 函数功能:对信号量的值value进行-1操作,相当于p操作。如果value的值为0,会立即返回,不发生阻塞。

5.解锁 函数原型:int sem_post(sem_t* sem) 函数功能:对信号量的值value进行+1操作,相当于v操作。当信号量的值value大于0时,其他调用sem_wait()正在等待信号量的线程将被唤醒。

线程级信号量相对于互斥锁对于线程的控制尺度更大,在sem_init()第三个参数可以控制同时访问共享资源的线程的个数,通过这个参数,可以实现同步控制、互斥、以及阻塞。

比如两个线程协同工作,只有在一个工作线程完成对共享资源的访问操作之后,另外一个工作线程才可以对共享资源做访问。还有比如只有当事件发生后才能让线程开始工作,需要让线程在此之间处于阻塞的状态,一旦事件发生后,唤醒等待的线程即可开始工作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档