• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

Linux 无名信号量使用方法求大佬解释!!!

sjsjling 2019-09-12 浏览量:698

各位大佬,请问这里的这个sem_post(&sem-1)和sem_wait(&sem-1)是什么意思呀? P/V操作不是直接写sem_post(&sem)和sem_wait(&sem)就行了吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。这是一个关于Linux 无名信号量的讲解,里面有关于无名信号量的实例。在 POSIX 标准中,信号量分两种,一种是无名信号量,一种是有名信号量。无名信号量一般用于线程间同步或互斥,而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似,无名信号量则直接保存在内存中,而有名信号量要求创建一个文件。

    • 发布于 2019-09-12
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 在C语言中&是取地址符号,所以&sem -1 是代表sem同类型变量地址的前一个,

    这个要具体看你代码目的啦,理论上这样调用是没有语法错误的,

    其实这里就相当于是sem_post,只是换了一个地址而已。

    但到底有没有问题,要看上下文啦,追踪各个变量的具体值,

    你要结合你的上下文仔细判断这样的具体意义啦。

    不过这样的编程习惯可能也有一些不可取,因为变量的意义,函数调用的意义不是太明确啊。

    本来信号量是一个比较简单的操作,但你给的这段代码明显不是太规范的,

    所以容易造成歧义,

    你必须结合实际的代码来进行理解,

    总之:

    1. sem_post(&sem-1)其实和sem_post(&sem)是类似的操作

    2. 这里要实现的前提是&sem-1 的地址也是一个sem_t 类型变量,并正确初始化了。



    • 发布于2019-09-13
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

Linux 无名信号量使用方法求大佬解释!!!