POSIX требует соответствующих реализаций, чтобы все стандартизированные им функции были поточно-ориентированными, за исключением относительно короткого списка функций. memcpy()
и mktime()
оба охватываются POSIX, и ни одно из них не входит в список исключений, поэтому POSIX требует, чтобы они были поточно-ориентированными (но читаются дальше).
Обратите внимание, однако, что дело не в используемом компиляторе, а в библиотеке C, поддерживающей ваше приложение. Я помню, что библиотеки Apple C в некоторых областях не соответствовали требованиям. Тем не менее, ничего особенного в memcpy()
и mktime()
нет, что делает их по сути рискованными с точки зрения безопасности потоков. То есть, нет никаких оснований ожидать, что они получат доступ к каким-либо общим данным, , кроме тех, которые предоставлены им через их аргументы .
И есть руб. Вы можете положиться на memcpy()
и mktime()
, чтобы, скажем, не полагаться внутренне на статические данные, но требования POSIX к безопасности потоков не распространяются на работу, описанную в документах, в отношении гонок данных, которые вы создаете с помощью выбора аргументов. Таким образом, например, если два разных потока вызывают memcpy()
, и целевая область одного вызова перекрывает либо исходную, либо целевую область другого, тогда вам потребуется некоторая разновидность синхронизации между потоками.