В случае Linux для функций времени у нас есть версии _r. Ex: localtime имеет localtime_r, но в Windows я не могу найти некоторые такие функции. Являются ли функции времени Windows неотъемлемо потокобезопасными?Являются ли временные функции MSVC потокобезопасными?
ответ
С помощью Microsoft Visual Studio у вас есть выбор с-время автономной работы для использования: как правило, они были:
- статической однопоточен библиотека (Libc)
- Статической многопоточной библиотеки (libcmt)
- динамические многопоточная библиотека (msvcrt)
Многопоточные библиотеки являются потокобезопасными. Однопоточная библиотека в последний раз была замечена в MSVC 2005 и была отброшена с MSVC 2008.
Время выполнения dll (msvcrt.dll) должно быть потокобезопасным. Поскольку реализация выполняется в dll и поэтому делится между несколькими другими модули в процессе, все из которых могут быть использованы рабочими потоками. Он должен быть потокобезопасным, поскольку не было бы разумного способа разработки приложения для его использования в противном случае.
Я думаю, что они не ThreadSafe и не существует версии _r. Но исправьте меня, если я ошибаюсь.
Может быть, это лучше, если вы используете собственные функции Windows, как
Я думаю, что для Windows localtime_s потокобезопасен: http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx - по крайней мере при использовании MS CRT
В окнах функции non-_r являются потокобезопасными, потому что они используют поточно-локальное хранилище для буфера. См. http://msdn.microsoft.com/en-us/library/bf12f0hc(VS.80).aspx
* исправьте меня, если я ошибаюсь * - вы ошибаетесь. см. другие ответы – vaxquis