Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 原子变量与原子操作_Multithreading_Synchronization_Parallel Processing_Atomic - Fatal编程技术网

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,而另一个进程已经读取了不一致的状态的情况,这仍然不能保证

只有当你知道每一次写入和读取都是原子变量时,你才会依赖原子变量——也就是说,如果你知道当一个进程更新变量时,另一个进程不会读取部分更改的变量,你就已经很高兴了

所以原子变量是每一个变量的原子,而不是每一组变量