Domanda

E 'possibile usare fcntl) chiamata di sistema (su un file per ottenere la sincronizzazione dei thread / processo (al posto di semaphoress)?

È stato utile?

Soluzione

Sì. serrature fcntl unix (e risorse filesystem in generale) sono di sistema, quindi ogni due thread di esecuzione (si separano processi o no) possono usarli. Se questo è una buona idea o non è dipendente dal contesto.

Altri suggerimenti

Questo è un modo per sincronizzare tra i processi, ma se non si desidera utilizzare i semafori, è possibile utilizzare processo condiviso mutex, come mutex e variabili di condizione create con l'attributo PTHREAD_PROCESS_SHARED su piattaforme basate su POSIX (vedi pthread_mutexattr_setpshared() e pthread_condattr_setpshared() ). Un'altra opzione è quella di utilizzare un evento basato IPC (prese, ecc) meccanismo che blocca fino a quando un evento si definisce è demultiplato (ad esempio tramite select() ). Ci sono diverse altre opzioni basate memoria condivisa pure.

Tuttavia, dal momento che si sta utilizzando C ++ Mi consiglia di utilizzare un framework C ++ che semplifica notevolmente questo tipo di sincronizzazione tra processi su più piattaforme come boost.interprocess o ACE .

Il fcntl e moltitudine non sono per filo, ma per il processo, quindi non possono essere utilizzati per la sincronizzazione thread.

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