2011-08-26 16 views
5

Ho la seguente domanda relativa a boost :: interprocess :: message_queue.Coda messaggi Boost

Come previsto, ho intenzione di condividere una coda di messaggi tra> = 2 processi. Ovviamente uno di loro potrebbe bloccarsi mentre si trova all'interno della coda dei messaggi. Di conseguenza manterrà i blocchi interni, rendendo la coda inaccessibile per altri processi. Come può essere risolto? Non sembra esserci un modo per sbloccare il mutex interno usato.

risposta

0

Possiamo usare il metodo di attesa del predicato in altri processi (1 minuto o superiore in base ai requisiti), quindi se questo soddisfa, sbloccare con forza la coda dal secondo processo, quindi bloccare nuovamente per spingere e sbloccare dopo aver letto?

per maggiori dettagli vedere il rif.

http://en.cppreference.com/w/cpp/thread/condition_variable/wait

Edit:

Non possiamo sbloccare le serrature interne, ho pensato che stai fissando manualmente la coda utilizzando

blocco scoped_lock (mutex);

Quindi è possibile sbloccare utilizzando il predicate_wait al termine del tempo, quindi sbloccarlo. da altro processo.

+0

Ciao Ali, come possiamo "sbloccare forzatamente la coda al secondo processo"? –

+0

Ciao, Forza significa solo sbloccare la coda manualmente dopo che la condizione soddisfa. – Ali786

+0

Specificare quale metodo utilizzare per "sbloccare la coda manualmente" http://www.boost.org/doc/libs/1_55_0/doc/html/boost/interprocess/message_queue_t.html –

Problemi correlati