原子变量Vs. 原子操作

3 parallel-processing multithreading synchronization atomic

假设我有两个共享变量 - ab- 彼此相关.当多个应用程序共享这些共享变量时,对它们的访问需要是原子操作,否则关系可能会中断.因此,为了确保相互排斥,我会将其修改置于受锁定保护的关键部分下.

critical_code
{
    P(mutex)
    a := something
    b := something
    V(mutex)
}
Run Code Online (Sandbox Code Playgroud)

让我们说我的硬件/ OS /编译器支持原子变量.然后我按如下方式修改了上面的代码.

code
{
    atomic a := something
    atomic b := something
}
Run Code Online (Sandbox Code Playgroud)

当多个应用程序访问时,此代码是否可以确保互斥?

真诚的,
Srinivas Nayak

sha*_*oth 6

不,你还需要一个关键部分.虽然每个变量的更新都是原子的,但这仍然不能保证当一个进程只中一个变量但另一个进程已经读取不一致状态时.

你只需要依赖原子变量就足以知道每一次写入和每一次读取都是原子的 - 即如果你知道当一个进程正在更新变量时另一个进程不会读取部分更改的变量,那么你已经很高兴了.

因此原子变量是每个变量的原子,而不是每组变量.