在Linux内核上,atomic_inc,atomic_dec等原子操作可以在多核环境下保护变量吗?

时间:2018-10-02 00:32:06

标签: linux-kernel

原子操作可以在多线程环境中保护变量,但是它适用于多线程环境吗?

2 个答案:

答案 0 :(得分:0)

是的,确实如此。它们通常是通过原子内存总线操作实现的,因此对于多核方案来说,它们的工作原理是相同的。

实际上,如果您知道要保护的数据仅由同一内核上的不同线程(任务)访问,则通过其他方式(例如禁用先占和/或中断)来实现保护可能会更便宜。原子操作专门用于不足的情况。例如多核系统。

答案 1 :(得分:0)

多线程本质上意味着有多个任务正在运行(进程)。根据维基百科:

  

原子性是与中断,信号,并发进程和线程隔离的保证。

这是因为这些操作被视为一种操作,因为它没有被任何中断。因此,多个线程当然可以执行这些操作,但是一次只能执行一个操作,因为处理器一次只能执行一个操作或原子操作。 对于有多个处理器尝试访问同一数据的多核进程,使用相同的逻辑。这是通过互斥来完成的,以确保关键代码块永远不会被多次访问。用软件的术语来说,这意味着它使用锁来确保多个处理器在使用时无法访问它。