c# - CultureInfo线程安全

标签 c# multithreading thread-safety cultureinfo

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

Msdn 文档说“此类型的任何公共(public)静态(在 Visual Basic 中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。” 我只是在使用以下函数,那么我怎么知道 TryParse 是否使用了 EngCulture 的任何实例成员?

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

void parser()
{
    if (int.TryParse(value, NumberStyles.Number, EngCulture, out num))...
}

最佳答案

尝试使用 CultureInfo.GetCultureInfo("en-US") 来“使用指定的文化名称检索缓存的只读文化实例。”

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

或者将你的字段设为只读,这样你就不需要锁了:

private static CultureInfo _culture = CultureInfo.ReadOnly(new CultureInfo("en-US"));

关于c# - CultureInfo线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298491/

相关文章:

java - 多次运行一个线程

php - 既然 Homebrew 不再支持 --with-thread-safety,如何下载线程安全的 PHP?

c# - 如何从路径中获取文件名?

c# - docker 中的 ASP.NET Core kestrel windows 身份验证识别错误的用户

c# - UNC 共享目录不存在

multithreading - C#处理线程和阻塞套接字

javascript - 如何为多个用户使用人员选择器? SharePoint 2013

c++ - 如何让 OpenMP 与 #pragma omp 任务一起工作?

c++ - 子字大小标志的线程安全

c++ - 针对推送优化的线程安全 C/C++ 队列