Multithreading 原子变量与原子操作
假设我有两个共享变量-Multithreading 原子变量与原子操作,multithreading,synchronization,parallel-processing,atomic,Multithreading,Synchronization,Parallel Processing,Atomic,假设我有两个共享变量-a和b,它们彼此相关。当多个应用程序共享这些共享变量时,对它们的访问需要是一个原子操作,否则关系可能会中断。所以为了确保互斥性,我将把它们的修改放在锁保护的关键部分下 critical_code { P(mutex) a := something b := something V(mutex) } 假设我的硬件/操作系统/编译器支持原子变量。然后我修改了上面的代码,如下所示 code { atomic a := something
a
和b
,它们彼此相关。当多个应用程序共享这些共享变量时,对它们的访问需要是一个原子操作,否则关系可能会中断。所以为了确保互斥性,我将把它们的修改放在锁保护的关键部分下
critical_code
{
P(mutex)
a := something
b := something
V(mutex)
}
假设我的硬件/操作系统/编译器支持原子变量。然后我修改了上面的代码,如下所示
code
{
atomic a := something
atomic b := something
}
当被多个应用程序访问时,此代码能否确保互斥
真诚地,斯里尼瓦斯·纳亚克不,你仍然需要一个关键部分。虽然每个变量的更新都是原子性的,但对于一个进程只对一个变量进行了MIDI,而另一个进程已经读取了不一致的状态的情况,这仍然不能保证 只有当你知道每一次写入和读取都是原子变量时,你才会依赖原子变量——也就是说,如果你知道当一个进程更新变量时,另一个进程不会读取部分更改的变量,你就已经很高兴了 所以原子变量是每一个变量的原子,而不是每一组变量