Насколько я знаю, поточно-ориентированные функции можно вызывать без необходимости мьютекса или семафора. Разве они не могут?
Например, strcpy()
или strdup()
является своего рода поточно-безопасной функцией.
Но когда я читал справочную страницу, я увидел следующее и не понял изречения вместе с жирным примером.
Быть MT-Safe не означает, что функция является атомарной или
использует любой из механизмов синхронизации памяти POSIX
выставляет пользователям. Возможно даже, что вызов MT-Safe
Последовательность функций не дает комбинации MT-Safe.
Например, если поток вызвал две функции MT-Safe, одну
сразу за другим не гарантирует эквивалент поведения
на атомарное выполнение комбинации обеих функций, т.к.
одновременные вызовы в других потоках могут мешать
разрушительный путь.
Является ли следующее использование неправильным в функции потока? Если да, то каковы неправильные моменты? Если нет, что означает цитируемое высказывание жирным шрифтом?
char *s1 = calloc(14, 1);
char *s2 = calloc(6, 1);
char *s3 = strdup("soner");
char *s4 = strdup("stackoverflow");
strcpy(s2, s3);
strcpy(s1, s4);
s1[13] = s2[5] = 0;
mutex_lock(&mtx);
printf("%s %s", s1, s2);
fflush(stdout);
mutex_unlock(&mtx);
free(s1);
free(s2);
free(s3);
free(s4);