Domanda

Ho due processi che accedono alla stessa memoria fisica (GPIO dati addr). Così come posso aver sincronizzato tra queste applicazioni? Capisco che abbiamo un qualche tipo di meccanismo di bloccaggio, come mutex e il semaforo, in modo che il metodo è il più veloce?

Grazie per il vostro aiuto,

-nm

È stato utile?

Soluzione

I mutex e semafori sono generalmente considerati soluzioni di concorrenza nello stesso spazio di indirizzamento -. Il che significa che le diverse parti dello stesso programma si blocca il loro accesso a una risorsa utilizzando uno di questi aggeggi

Quando hai a che fare con processi separati, il modo standard di fare questo su Linux è quello di creare qualcosa in /var/lock, come /var/lock/myapp.lock, e posiziona il PID seguito da un ritorno a capo in esso . Poi altri processi controllerà per la sua esistenza, e se sei furbo controlla il PID per assicurarsi che sia ancora vivo, anche.

Se avete bisogno di accesso in tempo reale per la zona, saltare il file system ei processi dovranno comunicare via IPC (LET_ME_KNOW_WHEN_DONE, OKAY_IM_DONE, si ottiene l'idea), o - meglio - scrivere un processo il cui unico scopo è per leggere e scrivere alla memoria GPIO, e gli altri programmi comunicano con è via IPC (probabilmente il migliore approccio).

Altri suggerimenti

mutex significa mutua esclusione - un semaforo è solo una variabile utilizzata per determinare se la risorsa è in uso. In Windows, v'è un oggetto mutex che può essere creato per proteggere una risorsa condivisa.

Il problema è che lingua stai usando? Quale sistema operativo (Io parto dal presupposto linux). La maggior parte dei linguaggi forniscono il supporto per il multi-threading e la mutua esclusione, e si dovrebbe usare i costrutti built-in.

Ad esempio, utilizzando C su Linux, si potrebbe desiderare di

includere semaphore.h

e cercare le chiamate per sem_init, sem_wait etc.

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