Domanda

Ho 10 processi in esecuzione, ognuno dei quali scrive nello stesso file. Non voglio più autori, quindi in sostanza sto cercando un semaforo mutex / binario per proteggere le scritture di file. Il problema è che non riesco a condividere il semaforo tra 10 processi, quindi sto cercando di utilizzare la memoria condivisa tra 10 processi e di inserire il semaforo nella memoria condivisa in modo che sia possibile accedervi da ciascun processo.

Qualcuno può indicarmi la documentazione su questo in C / C ++ per Unix? Il codice di esempio per utilizzare questa struttura sarebbe fantastico.

Grazie

È stato utile?

Soluzione

Sembra che staresti meglio usando flock (2) :

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

Altri suggerimenti

Mettere un semaforo nella memoria condivisa non è la soluzione migliore a questo problema (se anche funzionasse). È necessario esaminare il blocco dei file, che è una funzionalità UNIX specificatamente progettata per fornire esclusività tra i file writer.

In particolare, controlla:

Per altro materiale esplicativo, vedi Programmazione avanzata in ambiente UNIX, sezione 14.3

Dai un'occhiata a Vol. di programmazione di rete UNIX 2 di W. Richard Stevens.

È il miglior libro mai scritto su questo argomento.

È possibile utilizzare i mutex PTHREAD. Durante l'inizializzazione di un mutex è necessario utilizzare la funzione pthread_mutexattr_setpshared condiviso tra i processi e quindi inserirlo in una memoria condivisa. Tutti i processi possono collegarsi alla memoria condivisa e quindi accedere al mutex.

Inoltre è possibile aggiungere ulteriori attributi a SHM in base al requisito di blocco (ricorsivo, ecc.)

Che ne dici di usare UNIX IPC per creare una coda condivisa. Un processo legge la coda e scrive sul file, tutti gli altri processi spingono i dati in coda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top