2011-01-20 10 views
7

Se ci sono più thread che scrivono dati a lunghezza fissa (ad esempio indirizzo a 4 byte) su una singola pipe e vi è un singolo lettore di tale pipe, è garantito che il lettore ottenga i byte in ordine? In altre parole, è write() in un atomico di pipa?unix pipe più scrittori

risposta

5

http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html

atomica/non-atomica: Una scrittura è atomico se l'intero importo scritto in una operazione non è intercalati con i dati da qualsiasi altro processo. È utile quando ci sono più scrittori che inviano dati a un singolo lettore. Le applicazioni devono sapere quanto è grande una richiesta di scrittura da eseguire eseguita in modo atomico. Questo massimo è chiamato {PIPE_BUF}. Questo volume di IEEE Std 1003.1-2001 non dice se richieste di scrittura di più di {} PIPE_BUF byte sono atomiche, ma richiede che scrive su {} o PIPE_BUF meno byte devono essere atomica.

+0

Grazie. Ho visto la pagina man http://linux.die.net/man/2/write e non ho visto nulla. – Manish

+0

Si noti che il valore di 'PIPE_BUF' varia in modo significativo tra i sistemi Unix. Vedi qui per una collazione di valori osservati: http://ar.to/notes/posix#pipe-buf –