Я только что отладил программу, которая сделала примерно:
pthread_create(...);
close(0);
int t = open("/named_pipe");
assert(t == 0);
Иногда происходит сбой, поскольку pthread_create
на самом деле кратко открывает файловые дескрипторы в новом потоке - в частности, /sys/devices/system/cpu/online
- что, если вам не повезло, происходит между close
и open
выше, что делает t
чем-то другим чем 0.
Какой самый безопасный способ сделать это? Что, если что-либо гарантировано о pthread_create
относительно файловых дескрипторов? Я гарантированно, что если перед вызовом pthread_create открыто 3 файловых дескриптора, то при возврате и передаче моей функции в новом потоке будет также 3 открытых?