CultureInfo线程安全

loc*_*ope 11 c# multithreading cultureinfo thread-safety

我有一个解决一些文本的多线程应用程序,它需要使用英文文化信息来解析这个文本中的数字.所以,我不想每次调用解析函数时都创建EngCulture.目前我正在将EngCulture作为参数传递,但我对此并不满意.我想将EngCulture定义为静态成员,因此它将由线程共享.

Msdn文档说"这种类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的.任何实例成员都不能保证是线程安全的." 我只是使用以下函数,所以我怎么知道TryParse是否使用EngCulture的任何实例成员?

public static CultureInfo EngCulture = new CultureInfo("en-US", false);

void parser()
{
    if (int.TryParse(value, NumberStyles.Number, EngCulture, out num))...
}
Run Code Online (Sandbox Code Playgroud)

aba*_*hev 6

尝试使用CultureInfo.GetCultureInfo("en-US")"使用指定的区域性名称检索文化的缓存,只读实例".

http://msdn.microsoft.com/en-us/library/yck8b540.aspx

或者让你的领域是只读的,所以你不需要锁定:

private static CultureInfo _culture = CultureInfo.ReadOnly(new CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)

  • `CultureInfo.ReadOnly`是否授予线程安全保证?因为[只读和线程安全不同](http://blogs.msdn.com/b/ericlippert/archive/2011/05/23/read-only-and-threadsafe-are-different.aspx). (2认同)