MSVC的时间函数是否是线程安全的?

时间:2010-02-17 07:14:25

标签: c windows

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

4 个答案:

答案 0 :(得分:12)

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

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

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

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

答案 1 :(得分:8)

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

答案 2 :(得分:4)

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

答案 3 :(得分:-2)

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

如果你使用自己的Windows功能,也许它会更好,比如

GetSystemTimeGetSystemTimeAsFileTimeGetLocalTime