Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查找POSIX信号量上阻塞的任务数

查找POSIX信号量上阻塞的任务数
EN

Stack Overflow用户
提问于 2013-07-24 20:37:48
回答 3查看 1.2K关注 0票数 0

有没有什么方法可以让我知道等待特定信号量的进程或线程的数量?就像一个API来检查值。Sem_getvalue()只返回0,而不是负数,它的绝对值是一些站点上提到的信号量上阻塞的任务数。

任何帮助都是最好的。

提前感谢!!

EN

回答 3

Stack Overflow用户

发布于 2013-09-03 00:46:30

我真的不喜欢POSIX信号量。它们缺少许多SYS信号量可用的功能。

如果您使用的是SYS V信号量,则可以使用semctl函数获取各种信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int semctl(int semid, int semnum, int cmd, ...);

例如,要获取等待定义的信号量变为零的进程数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int cnt = semtcl(my_semid, 0, GETZCNT);

就这么简单!

SYS V信号量万岁!

票数 1
EN

Stack Overflow用户

发布于 2013-07-25 03:24:43

除了sem_getvalue之外,没有其他方法可以在POSIX API中做到这一点,正如您所看到的,语义是可选的。

也就是说,Linux将命名的POSIX信号量实现为/dev/shm下的文件,因此像fuser(1)这样的实用程序可以显示哪些进程打开了该文件。

如果这对您不起作用,您可以使用一个POSIX互斥锁、一个POSIX条件变量和一些空间来实现一个记账信号量,以记录信号量的值和所有的等待程序。

票数 0
EN

Stack Overflow用户

发布于 2016-11-30 07:10:25

您可能已经获取了一个全局atomic_t变量,并在调用sem_wait之前将其递增,然后在获得信号量的情况下递减。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17844348

复制
相关文章
Linux并发(POSIX信号量)
System-V的信号量是老古董,除非万不得已,否则我们一般用POSIX信号量,好用、简单、靠谱。
用户2617681
2019/08/08
2.4K0
信号量--System V信号量 与 Posix信号量
信号量是一种计数器,用来控制对多个进程/线程共享的资源进行访问。常和锁一同使用。 在某个进程/线程正在对某个资源进行访问时,信号量可以阻止另一个进程/线程去打扰。 生产者和消费者模型是信号量的典型使用。
看、未来
2020/08/26
1.7K0
【Linux】多线程 之 POSIX信号量
sem: 0 -> 1 -> 0 若临界资源只有1个,则sem设为1,当要使用临界资源时,sem由1变为0,其他人在想申请,则申请不到挂起排队,等待释放临界资源时 sem由0变为1 ,才可以再申请临界资源 这种信号量称为 二元信号量 ,等同于互斥锁
lovevivi
2023/10/17
3750
【Linux】多线程 之 POSIX信号量
数xSemaphoreTake的阻塞设置流程
将获取信号量函数xSemaphoreTake的阻塞时间改为0,也就是没获取到信号量,立即返回。
用户8671053
2021/10/06
2.9K0
Posix信号量与cond条件变量,到底该选谁?
好,了解之后切入正题,条件变量和信号量是各有千秋的,虽然大方向上都是为了实现线程同步,但是实现过程是有一定差异的。
看、未来
2020/08/26
2.7K0
线程(三)生产者消费者模型+POSIX信号量
生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。
海盗船长
2020/08/27
8980
【Linux】多线程 --- POSIX信号量+懒汉模式的线程池+其他常见锁
1. 在先前我们的生产消费模型代码中,一个线程如果想要操作临界资源,也就是对临界资源做修改的时候,必须临界资源是满足条件的才能修改,否则是无法做出修改的,比如下面的push接口,当队列满的时候,此时我们称临界资源条件不就绪,无法继续push,那么线程就应该去cond的队列中进行wait,如果此时队列没满,也就是临界资源条件就绪了,那么就可以继续push,调用_q的push接口。 但是通过代码你可以看到,如果我们想要判断临界资源是否就绪,是不是必须先加锁然后再判断?因为本身判断临界资源,其实就是在访问临界资源,既然要访问临界资源,你需不需要加锁呢?当然是需要的!因为临界资源需要被保护! 所以我们的代码就呈现下面这种样子,由于我们无法事前得知临界资源的状态是否就绪,所以我们必须要先加锁,然后手动判断临界资源的就绪状态,通过状态进一步判断是等待,还是直接对临界资源进行操作。 但如果我们能事前得知,那就不需要加锁了,因为我们提前已经知道了临界资源的就绪状态了,不再需要手动判断临界资源的状态。所以如果我们有一把计数器,这个计数器来表示临界资源中小块儿资源的数目,比如队列中的每个空间就是小块儿资源,当线程想要对临界资源做访问的时候,先去申请这个计数器,如果这个计数器确实大于0,那不就说明当前队列是有空余的位置吗?那就可以直接向队列中push数据。如果这个计数器等于0,那就说明当前队列没有空余位置了,你不能向队列中push数据了,而应该阻塞等待着,等待计数器重新大于0的时候,你才能继续向队列中push数据。
举杯邀明月
2023/10/17
4170
【Linux】多线程 --- POSIX信号量+懒汉模式的线程池+其他常见锁
查找(上)
查找(静态查找) 1.顺序查找 #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int a[101] ={5,16,20,27,30,36,44,55,60,67,74}; vector<int > b(a,a+11); cout<<"5,16,20,27,30,36,44,55,60,67,74" <<endl; cout<<"请输入要查找的数字"<<endl;
AngelNH
2020/04/16
2780
Linux 的进程间通信:信号量
本文介绍了Linux信号量、POSIX信号量、Linux条件变量和Linux线程同步基本概念,并通过代码示例展示了如何使用这些技术进行线程同步。
邹立巍
2017/07/25
6.8K0
UNIX IPC
管道一般为有亲缘关系进程提供单路数据流, 通过pipe(int fd[2])创建, 返回两个文件描述符, fd[0] 用于读,fd[1]用于写。 通过 read 和 write 函数进行 操作。
orientlu
2018/09/13
1.4K0
UNIX IPC
linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
文章主要介绍了在Linux系统中,如何利用自旋锁来实现线程之间的同步和互斥。主要包括了自旋锁的定义、工作原理、使用方式和注意事项,并通过实例介绍了如何在C语言中实现自旋锁。
s1mba
2017/12/28
1.6K0
Postgresql源码(91)POSIX匿名信号量初始化与使用流程总结
总结 Postgresql使用匿名信号量完成进程间的一些同步操作。 匿名信号量由父进程创建在mmap的共享内存内,通过血缘关系继承给子进程,子进程从共享内存中获取信号量数据结构直接使用即可。 Postgresql的信号量分配比较简单,每一个进程拥有一个自己的信号量。初始化后值为1,表示未锁定状态。 加锁后信号量=0。 解锁后信号量=1。 Postgresql的信号量初始化使用的是POSIX接口(SYSTEM V)中的匿名信号量(命名信号量)。 struct PGPROC { ... PGSem
mingjie
2022/12/02
4291
POSIX之semaphore
PV操作是计算机领域一个有名的术语。它由荷兰人Dijkstra提出,是一种典型的同步机制,P(荷兰语passeren)表示通过,V(荷兰语vrijgeven)表示释放。
Taishan3721
2022/05/16
8350
POSIX之semaphore
异步编程规避Redis的阻塞(上)
Redis的网络I/O和KV对读写都由主线程完成。若在主线程执行操作耗时太长,就会引起主线程阻塞。但Redis既有服务客户端请求的键值对增删改查操作,也有保证可靠性的持久化操作,还有主从复制时的数据同步操作。哪些会引起阻塞?
JavaEdge
2022/09/27
2390
异步编程规避Redis的阻塞(上)
查找数组中两数之和等于指定的数
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
Melody132
2020/03/11
1.2K0
查找数组中两数之和等于指定的数
LiteOS内核教程04 | 信号量(任务同步)
在多任务操作系统中,不同的任务之间需要同步运行,信号量功能可以为用户提供这方面的支持。信号量(Semaphore)是一种实现任务间通信的机制,实现任务之间同步或临界资源的互斥访问。
Mculover666
2020/07/16
1.2K0
LiteOS内核教程04 | 信号量(任务同步)
遇到的java随机数引起的阻塞问题
最后通过使用jstack -[pid],发现 sun.security.provider.SecureRandom 这里锁住了,原来这是java产生随机数造成了堵塞。
叔叔
2018/07/25
8520
遇到的java随机数引起的阻塞问题
线程池运行任务后阻塞问题分析
java.util.concurrent.Executors#newFixedThreadPool(int)
明明如月学长
2021/08/31
1.9K0
线程池运行任务后阻塞问题分析
使用二值信号量完成任务间的同步
实验设计:任务task00定时释放二值信号量,任务task01获取二值信号量,接收到信号量就进行相应的动作。
用户8671053
2021/10/06
4230
Task之多任务通信
VxWorks是一个典型的多任务操作系统。这多个任务之间不可能完全的彼此独立,它们需要一些系统机制来协调彼此的动作。这些机制就属于多任务通信,主要可以分为两类:事件通知、数据传递。
Taishan3721
2019/07/10
1K0

相似问题

POSIX信号量sem_wait ()无限阻塞

11

信号会被传送到POSIX信号量上被阻塞的程序吗?

25

macos上的POSIX信号量

15

posix信号量故障

10

POSIX信号量上限

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文