Разъяснение безопасности потоков в библиотеке a c
Может кто-нибудь уточнить мне, является ли следующий фрагмент кода безопасностью потоков?
int get_time(uint64_t *time)
{
struct timespec spec;
if (!time)
return -EFAULT;
if (clock_gettime(CLOCK_REALTIME, &spec) == -1)
return -errno;
*time = //convert timespec into nanoseconds
return SUCCESS;
}
Это API в библиотеке, который может вызываться несколькими потоками. Спецификация является локальной переменной, поэтому она не должна быть проблемой. Правильный? Мои сомнения касаются clock_getime (POSIX.1-2001) и назначения аргумента time. Я хотел бы ввести мьютекс, но я не уверен, строго ли это необходимо.
1 ответ
Вы не используете ничего, кроме автоматических переменных в вашем коде, и единственный вызов функции (clock_gettime
) по своей сути потокобезопасен, поэтому ответ таков:
Да, это безопасно.
3.396 Потокобезопасный
Функция, которая может безопасно вызываться одновременно несколькими потоками. Каждая функция, определенная в томе "Системные интерфейсы" стандарта IEEE Std 1003.1-2001, является поточно-ориентированной, если не указано иное. Примерами могут служить любая "чистая" функция, функция, которая удерживает мьютекс заблокированным во время доступа к статическому хранилищу, или объекты, совместно используемые потоками.
В спецификации для этой функции нет исключений:
http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_getres.html