【发布时间】:2011-01-17 17:54:55
【问题描述】:
在 Linux 中,对于时间函数,我们有一个 _r 版本 例如:localtime 有 localtime_r,但在 Windows 中我找不到一些这样的函数。 Windows 时间函数本质上是线程安全的吗?
【问题讨论】:
在 Linux 中,对于时间函数,我们有一个 _r 版本 例如:localtime 有 localtime_r,但在 Windows 中我找不到一些这样的函数。 Windows 时间函数本质上是线程安全的吗?
【问题讨论】:
使用 Microsoft Visual Studio,您可以选择要使用的 c 运行时:通常它们是:
多线程库是线程安全的。单线程库最后一次出现在 MSVC 2005 中,已从 MSVC 2008 中删除。
dll 运行时 (msvcrt.dll) 必须是线程安全的 - 由于实现在 dll 中,因此在进程中的多个其他模块之间共享,所有这些模块都可以使用工作线程,它必须是线程安全的因为没有理智的方法来设计应用程序以其他方式使用它。
【讨论】:
在 Windows 上,非 _r 函数是线程安全的,因为它们使用线程本地存储作为缓冲区。参见例如http://msdn.microsoft.com/en-us/library/bf12f0hc(VS.80).aspx
【讨论】:
我认为 Windows localtime_s 是线程安全的:http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx - 至少在使用 MS CRT 时
【讨论】:
我认为它们不是 ThreadSafe 并且没有 _r 版本。但如果我错了,请纠正我。
如果您使用自己的 Windows 功能可能会更好,例如
【讨论】: