首页 > 其他分享 >信号量sem 的用法

信号量sem 的用法

时间:2022-12-26 09:46:14浏览次数:42  
标签:__ 函数 阻塞 用法 信号量 线程 sem

#include <semaphore.h>

 

sem_t sem;

 

sem_init(&sem, 0, 0);

sem_post(&sem);

sem_wait(&sem);

sem_destroy(&sem);

 

信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:

extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));  

sem为指向信号量结构的一个指针;

pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;

value给出了信号量的初始值。  

 

函数sem_post( sem_t *sem )用来增加信号量的值。

当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。  

函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。 

 

函数sem_destroy(sem_t *sem)用来释放信号量sem。 

---------------------------------------------------------------

见过的实例用在阻塞主线程上,等程序运行结束资源释放的时候 使用sem_post(sem); 来结束阻塞。

标签:__,函数,阻塞,用法,信号量,线程,sem
From: https://www.cnblogs.com/kn-zheng/p/17005011.html

相关文章

  • jni中arm64-v8a,armeabi-v7a,armeabi文件夹的意义和用法
    查xplay5s的cpu,发现是arm64架构的处理器,查看so文件目录,如下:弄懂这几个文件夹到底是怎么一个顺序先。兼容和文件读取顺序arm64-v8a是可以向下兼容的,其下有armeabi-v7a,a......
  • Python函数用法和底层分析
    目录Python函数用法和底层分析函数的基本概念Python函数的分类核心要点形参和实参文档字符串(函数的注释)返回值函数也是对象,内存底层分析变量的作用域(全局变量和局部变......
  • maven生命周期及命令用法
    生命周期一个项目的构建build的过程通常包括:清理、编译、测试、打包、部署等Maven定义了三套生命周期:clean:处理项目的清理工作,主要命令是cleandefault:处理项目的dep......
  • 信号量
               ......
  • 第十八节:异步补充(CancellationToken终止信号、whenAll、whenAny、yeild return的用法
    一.CancellationToken终止信号 CancelAfter()超时后发出取消信号 Cancel()发出取消信号{CancellationTokenSourcects=new();cts.CancelAfter(4000);......
  • forms组件用法
    forms组件作用日常生活中我们有很多需要输入的信息,前后端都是需要有校验规则的,以及用户输入错误时给予对应的提示信息。当然我们可以使用ajax绑定事件来获取后端的提示,......
  • Linux分区命令parted的用法
    linux分区命令parted的用法parted的适用场景创建操作大于2T的分区一般情况下,我们都是选择使用fdisk工具来进行分区,但是目前在实际生产环境中使用的磁盘空间越来越大,呈T......
  • PCL_VIEWER 用法
    1.安装sudoapt-getinstallpcl-tools2.查看点云命令1)普通查看:pcl_viewera.pcd2)同时打开多个窗口查看多个文件:pcl_viewer-multiview1a.pcdb.pcd3) 打开一个窗口查......
  • ListView用法及BaseAdapter详解
    1.先上代码布局部分:items.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout......
  • C++中map用法详解
    Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1.map最基本的构造函数;map<string,......