Являются ли функции времени MSVC поточно-ориентированными? - PullRequest
11 голосов
/ 17 февраля 2010

В случае Linux для функций времени у нас есть версии _r. Например: localtime имеет localtime_r, но в Windows я не могу найти некоторые такие функции. Являются ли функции времени Windows по сути потокобезопасными?

Ответы [ 4 ]

12 голосов
/ 17 февраля 2010

В Microsoft Visual Studio вы можете использовать c-runtime: обычно это были:

  • статическая однопоточная библиотека (libc)
  • Статическая многопоточная библиотека (libcmt)
  • динамическая многопоточная библиотека (msvcrt)

Многопоточные библиотеки являются поточно-ориентированными. Однопоточная библиотека последний раз была замечена в MSVC 2005 и была удалена из MSVC 2008.

Среда выполнения dll (msvcrt.dll) просто должна быть поточно-безопасной - поскольку реализация находится в dll и поэтому используется несколькими другими модулями в процессе, каждый из которых может использовать рабочие потоки, он должен быть потокобезопасным поскольку не было бы никакого разумного способа разработать приложение, чтобы использовать его иначе.

8 голосов
/ 17 февраля 2010

В окнах не-_r-функции являются поточно-ориентированными, поскольку они используют локальное для потока хранилище для буфера.См. Например http://msdn.microsoft.com/en-us/library/bf12f0hc(VS.80).aspx

4 голосов
/ 17 февраля 2010

Я думаю, что Windows localtime_s является поточно-ориентированным: http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx - по крайней мере, при использовании MS CRT

0 голосов
/ 17 февраля 2010

Я думаю, что они не ThreadSafe и нет _r версии. Но поправь меня, если я ошибаюсь.

Может быть, лучше использовать собственные функции Windows, например

GetSystemTime , GetSystemTimeAsFileTime или GetLocalTime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...