假设我有两个共享变量 - a
和b
- 彼此相关。当多个应用程序共享这些共享变量时,对它们的访问需要是原子操作,否则关系可能会中断。因此,为了确保相互排斥,我会将其修改置于受锁定保护的关键部分。
critical_code
{
P(mutex)
a := something
b := something
V(mutex)
}
让我说我的硬件/ OS /编译器支持原子变量。然后我修改了上面的代码如下。
code
{
atomic a := something
atomic b := something
}
当多个应用程序访问时,此代码是否可以确保互斥?
此致
Srinivas Nayak
答案 0 :(得分:6)
不,你还需要一个关键部分。虽然每个变量的更新都是原子的,但这仍然不能保证当一个进程只中一个变量但另一个进程已经读取不一致状态时。
只有足够知道每一个写入和每一个读取都是原子的时候才会依赖原子变量 - 如果你知道当一个进程正在更新变量而另一个进程正在读取部分更改时你已经很高兴了变量
因此原子变量是每个变量的原子,而不是每组变量。