Справочные страницы ( https://linux.die.net/man/2/flock ) неясно, разрешена ли операция LOCK_UN для flock(), если разблокировка уже была вызвана в другом потоке. В моем случае несколько потоков могут читать один и тот же файл через несколько файловых дескрипторов, каждый из которых будет вызывать flock(fd, LOCK_SH), а затем flock(fd, LOCK_UN) после чтения. Приведет ли это к неопределенному поведению?
Например:
//Two duplicate threads do:
FILE* fp = fopen("path", "r");
if (fp) {
int fd = fileno(fp); // there is much more complexity in-between that makes fopen easier to use
flock(fd, LOCK_SH);
my_read_function(fp); // does something with a global (not the case in actual code)
fclose(fp); // apparently the file might already be unlocked here if only this thread has opened it, but assume that I may use C++ to create some safer wrapper to handle exceptions and decide to use explicit flock calls outside the destructor
flock(fd, LOCK_UN);
}
Также я не уверен, что flock вообще необходим, учитывая, что потоки только читают. Тем не менее, является ли хорошей практикой использовать flock() таким образом?
Заранее спасибо.