当前位置:  技术问答>linux和unix

原子操作的问题

    来源: 互联网  发布时间:2015-04-13

    本文导语:  我想在用户空间执行原子操作,请问给如何实现啊? | 不知道你是用什么CPU?UNP还是SMP?IA还是别的体系? 上边你列出的就是SysV IPC的信号量,也算是原子操作吧。 你说的原子操作也很含糊...

我想在用户空间执行原子操作,请问给如何实现啊?

|
不知道你是用什么CPU?UNP还是SMP?IA还是别的体系?
上边你列出的就是SysV IPC的信号量,也算是原子操作吧。
你说的原子操作也很含糊,你是想把一个数加到另一个变量上,一次性完成,所以不想用信号量还是别的?我不知道lock指令在80x86上算不算特权指令,如果不是的话,你在用户态SMP也是可以使用的。
以下是内核源代码:
#ifdef CONFIG_SMP
#define LOCK "lock ; "
#else
#define LOCK ""
#endif

typedef struct { volatile int counter; } atomic_t;

#define ATOMIC_INIT(i) { (i) }
#define atomic_read(v) ((v)->counter)
#define atomic_set(v,i) (((v)->counter) = (i))
static __inline__ void atomic_add(int i, atomic_t *v)
{
__asm__ __volatile__(
LOCK "addl %1,%0"
:"=m" (v->counter)
:"ir" (i), "m" (v->counter));
}

感觉这个函数在80x86 UNP 上和  n += i;没有什么区别,只是用__volatile__来拒绝编译器的优化,但是在SMP上多了一个lock指令。

    
 
 

您可能感兴趣的文章:

  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • php iis7站长之家
  • linux内核原子量操作的小疑问
  • linux中同步与原子操作的相关知识辨析【请教高手】
  • shmget shmctl shmop 是不是都是原子操作
  • unix编程,两条语句,有方法可以保证是原子操作吗
  • 怎么实现一个原子操作
  • linux平台usleep(time);函数是否是原子操作不能被CPU线程切换打断?
  • 请问:如何让对多个现有的文件的写操作成为一个原子操作,并可以实现安全的回滚功能?
  • 不理解为什么这样就是原子的操作了
  • 什么是原子操作?
  • 在用户态如何使用原子操作?
  • linux上到应用程序原子操作的实现问题
  • 谁知道solaris对socket的recv和send函数是否是原子操作,谢谢!!
  • linux中有对某个数值进行原子操作的函数吗?
  • 高手请进!Solaris下如何实现原子加的操作?不用互斥量等等同步对象!
  • linux原子操作的疑惑
  • 新手求教LINUX下的原子操作该怎么写
  • asm volatile("incl %0":"+r"(b));是原子操作么。。。
  • 原子操作 怎么弄?
  • 问一个有名管道的原子性读写的问题(版主们一定要进)
  • 问个IO原子性的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 原子上下文 不能睡眠的原因是? 原子上下文能否调度?
  • 进程中原语的原子性得不到保证会怎样?
  • 求助:关于pipe写入的原子性


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3