我有一个公共字符串,它是从DataTable中的数据设置的,我正在寻找一个如何使其多线程安全的例子
public string Server { get; set; }
string Server = DT.Rows[0].ItemArray[0].ToString();
这就是我所拥有的,当所有其他线程根据数据表中的数据设置其字符串Server时,我不认为这是安全的。
答案 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; }