В случае Linux для функций времени у нас есть версии _r. Ex: localtime имеет localtime_r, но в Windows я не могу найти некоторые такие функции. Являются ли функции времени Windows неотъемлемо потокобезопасными?
Являются ли временные функции MSVC потокобезопасными?
Ответ 1
В Microsoft Visual Studio у вас есть выбор времени использования c: обычно они были:
- статическая однопоточная библиотека (libc)
- Статическая многопоточная библиотека (libcmt)
- динамическая многопоточная библиотека (msvcrt)
Многопоточные библиотеки являются потокобезопасными. Однопоточная библиотека в последний раз была замечена в MSVC 2005 и была удалена из MSVC 2008.
Время выполнения dll (msvcrt.dll) просто должно быть потокобезопасным. Поскольку реализация находится в dll и, следовательно, распределяется между несколькими другими модулями в процессе, все из которых могут использоваться рабочими потоками, это должно быть потокобезопасным так как не было бы разумного способа разработки приложения для его использования в противном случае.
Ответ 2
В окнах функции non-_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, например