线程安全公共字符串

时间:2012-04-03 17:17:16

标签: c# .net multithreading ado.net

我有一个公共字符串,它是从DataTable中的数据设置的,我正在寻找一个如何使其多线程安全的例子

public string Server { get; set; }

string Server = DT.Rows[0].ItemArray[0].ToString();

这就是我所拥有的,当所有其他线程根据数据表中的数据设置其字符串Server时,我不认为这是安全的。

2 个答案:

答案 0 :(得分:5)

从您的评论到原始帖子,我认为您想要的是ThreadLocal

你会得到:

// declared as:
ThreadLocal<string> Server;

// ... initialized by:
Server = new ThreadLocal(() => DT.Rows[0].ItemArray[0].ToString());

在每个线程中,此处的字符串对于该线程是唯一的。

如果您希望第一个线程获胜(延迟加载模型),请使用以下Lazy

// declared as:
Lazy<string> Server;

// ... initialized by:
Server = new Lazy(() => DT.Rows[0].ItemArray[0].ToString());

在每个线程中,此处的字符串将被共享,并且只有第一个线程会加载它。

答案 1 :(得分:-1)

您可以尝试使用volatile关键字:

public volatile string Server { get; set; }