fcntl () per filo o processo di sincronizzazione?
-
21-09-2019 - |
Domanda
E 'possibile usare fcntl) chiamata di sistema (su un file per ottenere la sincronizzazione dei thread / processo (al posto di semaphoress)?
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.