Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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#_.net_Multithreading - Fatal编程技术网

C# 默认情况下使静态数据线程安全意味着什么?

C# 默认情况下使静态数据线程安全意味着什么?,c#,.net,multithreading,C#,.net,Multithreading,我想在我的问题之前声明我理解线程同步原语,我的问题不是如何使用它们。这只是我从MSDN上读到的一个声明的澄清 该页在结尾处指出以下要点之一: 默认情况下,使静态数据(在Visual Basic中共享)成为线程安全的 这是什么意思?这是否意味着有一种方法可以在不使用任何线程同步代码的情况下使静态数据线程安全?如果是,怎么做 class Foo { // How do you make this thread-safe without thread sync code? static int

我想在我的问题之前声明我理解线程同步原语,我的问题不是如何使用它们。这只是我从MSDN上读到的一个声明的澄清

该页在结尾处指出以下要点之一:

默认情况下,使静态数据(在Visual Basic中共享)成为线程安全的

这是什么意思?这是否意味着有一种方法可以在不使用任何线程同步代码的情况下使静态数据线程安全?如果是,怎么做

class Foo
{
  // How do you make this thread-safe without thread sync code?
  static int x;

  static void Do()
  {
    // This, I understand, is thread-safe, by default.
    int y;
  }
}

感谢问题评论员的指导。我把这篇文章作为对任何可能有同样困惑的人的回答

阅读下一行可以清楚地看出,这意味着我们必须使用线程同步代码来确保静态数据的线程安全

虽然我们还必须小心可能会受到多线程使用影响的敏感实例数据,但最好在为保护实例数据而编写的同步代码级别上达成折衷,因为这可能会对性能产生不利影响

下一点内容如下:


默认情况下,不要使实例数据成为线程安全的。添加锁以创建线程安全代码会降低性能,增加锁争用,并可能导致死锁发生。在常见的应用程序模型中,一次只有一个线程执行用户代码,这使得对线程安全的需求最小化。因此,.NET Framework类库在默认情况下不是线程安全的。

否,这意味着您的默认编码实践应该使静态数据是线程安全的。否,这意味着使用线程同步代码来确保没有两个或更多线程会干扰数据,以减少争用和争用情况。@Blorgbeard谢谢。阅读下一行暗示了你的建议。