Consultando la manualistica, nella libc ho trovato la funzione flockfile() che agisce su FILE e, da quanto riportato, potrebbe essere thread-safe.
La manualistica riporta che
è thread-safe come tutte le funzioni definite nel stdio.
Ma volendo agire a livello più basso, a livello di sistema operativo, è possibile utilizzare flock()?
Nella manualistica non è esplicitamente riportato il suo essere o meno thread-safe, ma è chiaramente spiegato che il lock si applica al file stesso e non al suo descrittore (che è unico per diversi thread di un unico processo). Potrebbe, quindi, essere ugualmente utilizzabile?
No.
edit:
form man flock(2) #Note
flock() places advisory locks only; given suitable permissions on a file, a process is free to ignore the use of flock() and perform I/O on the file.
flock() and fcntl(2) locks have different semantics with respect to forked processes and dup(2). On systems that implement flock() using fcntl(2), the semantics of flock() will be different from those described in this manual page.
Converting a lock (shared to exclusive, or vice versa) is not guaranteed to be atomic: the existing lock is first removed, and then a new lock is established. Between these two steps, a pending lock request by another process may be granted, with the result that the conversion either blocks, or fails if LOCK_NB was specified. (This is the original BSD behavior, and occurs on many other implementations.)