当前位置: 技术问答>linux和unix
如何实现操作不被其他进程打断?
来源: 互联网 发布时间:2016-01-27
本文导语: 大概是这样的一个程序,目标是为了测试系统的timer interrupts是否正常 /proc/interrupts文件中有一行timer记录着系统的timer interrupts次数,而且不断的增加中.我要计算在两个时间点(不一定是wall time)下,其增加值是否和预期...
大概是这样的一个程序,目标是为了测试系统的timer interrupts是否正常
/proc/interrupts文件中有一行timer记录着系统的timer interrupts次数,而且不断的增加中.我要计算在两个时间点(不一定是wall time)下,其增加值是否和预期的一样.
实现方法大概如下:
if(时间点1)
次数1=读(/proc/interrupts文件);
if(时间点2)
次数2=读(/proc/interrupts文件);
每个时间点的次数=(次数2-次数1)/(时间点2-时间点1)
.....
现在的问题是我如何才能保证在时间点1成功后,立刻就去读取(/proc/interrupts文件,而不会在两者的时间窗口被其他进程打断呢?要是被打断,那么计算出来的值将不会正确.
请各位高手提出自己的看法...谢谢
/proc/interrupts文件中有一行timer记录着系统的timer interrupts次数,而且不断的增加中.我要计算在两个时间点(不一定是wall time)下,其增加值是否和预期的一样.
实现方法大概如下:
if(时间点1)
次数1=读(/proc/interrupts文件);
if(时间点2)
次数2=读(/proc/interrupts文件);
每个时间点的次数=(次数2-次数1)/(时间点2-时间点1)
.....
现在的问题是我如何才能保证在时间点1成功后,立刻就去读取(/proc/interrupts文件,而不会在两者的时间窗口被其他进程打断呢?要是被打断,那么计算出来的值将不会正确.
请各位高手提出自己的看法...谢谢
|
再说原子操作导致时间中断丢失,应该在一个时间中断间隔之内完成你的操作,
这里你用到了读文件系统调用,绝不要使用原子操作了,否则如果读阻塞,你的系统就永远挂在那里了
这里你用到了读文件系统调用,绝不要使用原子操作了,否则如果读阻塞,你的系统就永远挂在那里了
|
这种应用,估计只能用实时操作系统。
或都用单任务的DOS系统。
不过我也还没怎么弄明白楼主的用意?
如果是在一个线程中,当然是顺序执行的,怎么会被打断?
如果是多线程,可以用锁来同步啊?
或都用单任务的DOS系统。
不过我也还没怎么弄明白楼主的用意?
如果是在一个线程中,当然是顺序执行的,怎么会被打断?
如果是多线程,可以用锁来同步啊?
|
要用内核的原子操作 asm/atomic.h,不过
#warning Using kernel header in userland program. BAD!
#warning Using kernel header in userland program. BAD!