日期:2014-05-16  浏览次数:20795 次

如何实现操作不被其他进程打断?
大概是这样的一个程序,目标是为了测试系统的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文件,而不会在两者的时间窗口被其他进程打断呢?要是被打断,那么计算出来的值将不会正确.

  请各位高手提出自己的看法...谢谢
   


------解决方案--------------------
这种应用,估计只能用实时操作系统。
或都用单任务的DOS系统。
不过我也还没怎么弄明白楼主的用意?
如果是在一个线程中,当然是顺序执行的,怎么会被打断?
如果是多线程,可以用锁来同步啊?

------解决方案--------------------
要用内核的原子操作 asm/atomic.h,不过
#warning Using kernel header in userland program. BAD!


------解决方案--------------------
再说原子操作导致时间中断丢失,应该在一个时间中断间隔之内完成你的操作,
这里你用到了读文件系统调用,绝不要使用原子操作了,否则如果读阻塞,你的系统就永远挂在那里了