假设我有两个相互关联的共享变量-- a和b。当多个应用程序共享这些共享变量时,对它们的访问需要是原子操作,否则关系可能会中断。因此,为了确保互斥,我将把它们的修改放在一个受锁保护的临界区中。
critical_code
{
P(mutex)
a := something
b := something
V(mutex)
}假设我的硬件/OS/编译器支持原子变量。然后我修改了上面的代码,如下所示。
code
{
atomic a := something
atomic b := something
}当被多个应用程序访问时,这段代码能确保互斥吗?
由衷地,
Srinivas Nayak
发布于 2010-05-19 17:15:15
不,你仍然需要一个临界区。虽然每个变量的更新都是原子的,但当一个进程只修改了一个变量,而另一个进程已经在读取不一致的状态时,这仍然不能保证。
只有在知道每次写和读都是原子的情况下,你才会依赖原子变量--也就是说,如果你知道当一个进程更新变量时,另一个进程不会读取部分更改的变量,你已经很高兴了。
所以原子变量是一个变量的原子,而不是一组变量的原子。
https://stackoverflow.com/questions/2864179
复制相似问题