当前位置: 首页 > 面试题库 >

如何在C中进行原子增量和获取?

洪飞白
2023-03-14
问题内容

我正在寻找一种方法来原子地增加一个short,然后返回该值。我需要在内核模式和用户模式下都执行此操作,因此它是在Linux下,Intel
32位架构上的C语言中。不幸的是,由于速度要求,互斥锁将不是一个好的选择。

还有其他方法吗?此时,似乎唯一可用的选择是内联某些程序集。如果是这样,有人可以向我指出适当的指示吗?


问题答案:

GCC支持原子操作:

gcc原子



 类似资料:
  • 问题内容: 如果长变量声明为:- 私有易失性长计数器= 0; 现在,如果我使用预增量运算符对其进行增量,那么该操作将是原子的吗? 如果是,那么它将比对象的增量效率更高吗? 问题答案: 关键字只能解决可见性问题。您必须使用或方法/块来实现原子性(并发编程中的原子性)。 今天又发表了一篇文章:演示何时需要挥发物

  • 问题内容: 我正在尝试以原子方式在Django中增加一个简单的计数器。我的代码如下所示: 如果我正确理解Django,则应将函数包装在事务中并使增量成为原子。但这不起作用,并且计数器更新中存在竞争条件。如何使此代码成为线程安全的? 问题答案: Django 1.1的新功能 或使用F表达式: 请记住指定要更新的字段,否则您可能在模型的其他可能字段上遇到竞争条件!

  • 问题内容: 我了解对此主题有很多疑问。但是我仍然有些困惑,不确定何时使用这些操作。我正在为参加考试而做的旧考试。其中一种方法返回可访问的残疾人可用教室的数量。我编写了counter方法,但不确定是应该先递增还是递后递增计数器。我对它如何与方法中的return语句混淆。我仍然不知道该方法将在下面返回什么值。其他问题未在方法中显示返回值,因此我对它的工作方式感到困惑。这是代码: 问题答案: 当您要在表

  • 原子操作 是个不可分割的操作。 在系统的所有线程中,你是不可能观察到原子操作完成了一半这种情况的; 它要么就是做了,要么就是没做,只有这两种可能。 如果从对象读取值的加载操作是 原子 的,而且对这个对象的所有修改操作也是 原子 的, 那么加载操作得到的值要么是对象的初始值,要么是某次修改操作存入的值。 另一方面,非原子操作可能会被另一个线程观察到只完成一半。 如果这个操作是一个存储操作,那么其他线

  • 问题内容: 如何在MySQL中获取下一个ID以将其插入表中 问题答案: 使用从您的SQL查询。 要么 您也可以使用PHP来获取它。

  • 在多核x86机器上,假设在core1上执行的线程增加一个整数变量,同时Core2上的线程也增加它。假设的初始值为0,那么它最终是否总是?或者它还有其他价值?假设被声明为,并且我们没有使用原子变量(例如原子变量) 如果在这种情况下的值实际上总是2,这是否意味着x86-64中的也将具有相同的属性,即最终总是2?