在用户态如何使用原子操作?

abc00000001 2010-01-14 11:47:47
要求连续几个操作不能被打断。

类似于:
u16 t1, t2;

raw_local_irq_save(flg)

t1 = timer[1];
t2 = timer[2];

raw_local_irq_restore(flg);

//do something

...全文
650 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc00000001 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fetag 的回复:]
引用 2 楼 abc00000001 的回复:
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)

我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)

你要是想保证不被CPU中断,那就只能是关中断了,可是你的程序能有那么高的权限吗?
[/Quote]

有这个需求,另外它是实时进程,FIFO 调度方式。时间尺度是10us级别的,就这个原子操作而言,要求在少于0.125us(125ns)内保证完成相关操作(CPU@312MHZ)

所以,怎么关中断能保证它的性能不受大的影响?
独孤过儿 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 abc00000001 的回复:]
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)

我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)
[/Quote]
你要是想保证不被CPU中断,那就只能是关中断了,可是你的程序能有那么高的权限吗?
fpcc 2010-01-14
  • 打赏
  • 举报
回复
或者用事件或信号,只有执行完某些动作,才发出工作信号,进行下一步动作,很多的方法啊。
fpcc 2010-01-14
  • 打赏
  • 举报
回复
那你就把必须做完的锁里加一个控制变量,如果不做完,控制变量就为FALSE,然后下面加一个判断不就成了。
abc00000001 2010-01-14
  • 打赏
  • 举报
回复
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)

我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)

独孤过儿 2010-01-14
  • 打赏
  • 举报
回复
可以用互斥锁来实现pthread_mutex_lock()
独孤过儿 2010-01-14
  • 打赏
  • 举报
回复
所以,怎么关中断能保证它的性能不受大的影响?
=================================
当然是在尽可能小的block内关中断了。也就是这样的结构:

// 关中断
原子操作块
// 开中断

但是要尽量的使 原子操作块 的语句少一些,压缩到最低!只把那些必须执行原子操作的语句放在这里,其余不必要的或者不是很紧要的一律放到外面去,这样就能保证开关中断的时间差最小了

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧