linux进程中断后如何知道已经占用的信号量?
我在linux里面写了一个用户态的多进程程序,这些进程都会有些公用的信号量,用的是semaphore,有的时候我的进程会进入定时器中断,在中断子程序里面我要释放本进程已经占用的信号量,然后exit,可是我怎么知道我的进程占用了哪些信号量呢?
我的想法是对每个占用的信号量做个记录,在中断子程序里面根据这个记录来释放信号量,可是有的时候在申请信号量成功后和记录之间发生了中断,这样申请和记录就不是一一对应了,我想找个原子操作函数来封装这两个动作,可是我也没找到在用户态可以用的函数,那个spinlock指南用于核态。
不知道大家有没有遇见这样的问题,望高手指点,或者说个解决办法。
待牛人解答、、、
释放本进程点用的信号量:sem_post(),
详细用法参见:man sem_post
的确是一个很纠结的问题。
不过你可以在申请信号量之前屏蔽中断,记录以后再打开。
在用户态程序里面有可以暂时屏蔽中断的接口吗?即使有的话,如果在屏蔽中断和恢复中断之间有一个中断来了,那等恢复中断后那个刚刚被屏蔽的中断还能再使进程进入中断吗?
用户态程序不用申请中断,当然也不能屏蔽中断。要知道系统调用也是中断的一种,为软中断。
你自己的程序用了哪些信号量,都不知道,看源码就行了,
要是bin文件,分析一下汇编。
定时器中断 这个信号是可以忽略的。
可以看一下
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set
相关问答:
小弟最近需要一个用socket获取html文档的代码,但是老是不能获取完整的html源码。原因不明,望高手指点!
C/C++ code:
char *Http_GET(char *host,int port,char *data) //发送GET请求
{
char response[2 ......
两个文件1.PC,1.inc
1.PC有操作oracle数据库的 ,1.inc也有操作oracle数据库
在其他数据中如informix 中$include 1.inc就可以使用了
在ORACLE数据库重 $include 1.inc不可用 EXEC SQL include 1.inc也不可 ......
在自己的电脑上安装了ubuntu 就是想玩一下3D桌面,于是下载了
compizconfig-settings-manager
emerald
simple-ccsm
fusion
这些东西,安装完之后,我在电脑里点击了emerald ......
在linux环境下,如何用C语言取得系统当前进程的总数?
system调用外部命令ps -ef | wc -l 的就免谈了,这个我会
那 lz想在用户空间做还是内核态做呢?
用户空间我的想法是统计/proc目录下有几个数字文件夹
当然 ......