Cosa succederebbe se chiami read
(o write
, o entrambi) in due thread diversi, sullo stesso descrittore di file (diciamo che siamo interessati a un file locale, ed è un descrittore di file socket), senza utilizzare esplicitamente un meccanismo di sincronizzazione?C read and thread safety (linux)
Leggere e scrivere sono syscall, quindi, su una CPU single core, è probabilmente sfortunato che due letture vengano eseguite "allo stesso tempo". Ma con più core ...
Cosa farà il kernel linux?
E siamo un po 'più generali: il comportamento è sempre lo stesso per gli altri kernel (come i BSD)?
Modifica: in base allo close documentation, dovremmo essere sicuri che il descrittore di file non sia utilizzato da un syscall in un altro thread. Di conseguenza, sarebbe necessaria una sincronizzazione esplicita prima di chiudere un descrittore di file (e quindi, anche in lettura/scrittura se il thread che potrebbe chiamarlo è ancora in esecuzione).
Non è possibile utilizzare un meccanismo di sincronizzazione; il kernel lo fa già per te. –
Intendo, usando esplicitamente. Quindi il kernel fa tutto il lavoro da solo, e leggere/scrivere/chiamare entrambi su di essi non richiede alcuna sincronizzazione esplicita? –
Per quanto ne so, si. In realtà non sono un esperto di kernel Linux, ma non riesco a immaginarlo diversamente. Forse arriverà qualcuno con una conoscenza più specifica. –