Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/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
C# 在C语言中使用Volatile关键字#_C#_Task Parallel Library - Fatal编程技术网

C# 在C语言中使用Volatile关键字#

C# 在C语言中使用Volatile关键字#,c#,task-parallel-library,C#,Task Parallel Library,我使用的是Volatile关键字,但它的行为方式与预期不同 这是我的密码 private static volatile int _N = 0; var up = Task.Run(() => { for (int i = 0; i < 1000000; i++) _N++; }); for (int i = 0; i < 1000000; i++) _N--; up.Wait(); Console.WriteLine(_N); priv

我使用的是Volatile关键字,但它的行为方式与预期不同

这是我的密码

private static volatile int _N = 0;



var up = Task.Run(() =>
{
    for (int i = 0; i < 1000000; i++)
        _N++;
});
for (int i = 0; i < 1000000; i++)
    _N--;
up.Wait();
Console.WriteLine(_N);
private静态volatile int=0;
var up=Task.Run(()=>
{
对于(int i=0;i<1000000;i++)
_N++;
});
对于(int i=0;i<1000000;i++)
_N--;
起来,等等;
控制台写入线(N);
_N是一个类变量

每次我得到的是一个不同的数字,就好像没有使用关键字volatile一样。 这是关键字的正确行为吗

每次我得到的是一个不同的数字,就好像没有使用关键字volatile一样。这是关键字的正确行为吗

将变量指定为volatile不会使递增或递减操作原子化。假设您的循环是这样编写的:

for (int i = 0; i < 1000000; i++)
{
    int x = _N;
    x++;
    _N = x;
}
for(int i=0;i<1000000;i++)
{
int x=\u N;
x++;
_N=x;
}
这实际上就是前面的循环——只是现在你在读,然后执行一个操作,然后写,这更清楚了。没有什么可以阻止另一个线程在这两个操作之间写入不同的值

对于原子性,应该使用和

就我个人而言,我会尽可能避免使用
volatile
。在我看来,它的确切含义相对难以描述,也难以推理。最好尽可能使用更高级别的构造

每次我得到的是一个不同的数字,就好像没有使用关键字volatile一样。这是关键字的正确行为吗

将变量指定为volatile不会使递增或递减操作原子化。假设您的循环是这样编写的:

for (int i = 0; i < 1000000; i++)
{
    int x = _N;
    x++;
    _N = x;
}
for(int i=0;i<1000000;i++)
{
int x=\u N;
x++;
_N=x;
}
这实际上就是前面的循环——只是现在你在读,然后执行一个操作,然后写,这更清楚了。没有什么可以阻止另一个线程在这两个操作之间写入不同的值

对于原子性,应该使用和


就我个人而言,我会尽可能避免使用
volatile
。在我看来,它的确切含义相对难以描述,也难以推理。如果可能,最好使用更高级别的结构。

您是否假设
volatile
关键字的性能与volatile.Write相同?您是否假设
volatile
关键字的性能与volatile.Write相同?