【问题标题】:Are the time functions of MSVC thread-safe?MSVC 的时间函数是线程安全的吗?
【发布时间】:2011-01-17 17:54:55
【问题描述】:

在 Linux 中,对于时间函数,我们有一个 _r 版本 例如:localtime 有 localtime_r,但在 Windows 中我找不到一些这样的函数。 Windows 时间函数本质上是线程安全的吗?

【问题讨论】:

    标签: c windows


    【解决方案1】:

    使用 Microsoft Visual Studio,您可以选择要使用的 c 运行时:通常它们是:

    • 静态单线程库 (libc)
    • 静态多线程库 (libcmt)
    • 动态多线程库 (msvcrt)

    多线程库是线程安全的。单线程库最后一次出现在 MSVC 2005 中,已从 MSVC 2008 中删除。

    dll 运行时 (msvcrt.dll) 必须是线程安全的 - 由于实现在 dll 中,因此在进程中的多个其他模块之间共享,所有这些模块都可以使用工作线程,它必须是线程安全的因为没有理智的方法来设计应用程序以其他方式使用它。

    【讨论】:

      【解决方案2】:

      在 Windows 上,非 _r 函数是线程安全的,因为它们使用线程本地存储作为缓冲区。参见例如http://msdn.microsoft.com/en-us/library/bf12f0hc(VS.80).aspx

      【讨论】:

        【解决方案3】:

        我认为 Windows localtime_s 是线程安全的:http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx - 至少在使用 MS CRT 时

        【讨论】:

          【解决方案4】:

          我认为它们不是 ThreadSafe 并且没有 _r 版本。但如果我错了,请纠正我。

          如果您使用自己的 Windows 功能可能会更好,例如

          GetSystemTimeGetSystemTimeAsFileTimeGetLocalTime

          【讨论】:

          • 如果我错了请纠正我 - 你错了。查看其他答案
          猜你喜欢
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-18
          • 2013-05-24
          相关资源
          最近更新 更多