Ho letto sul multithreading e accesso alle risorse condivise e uno dei molti (per me) nuovi concetti è il blocco mutex. Quello che non riesco a scoprire è ciò che sta realmente accadendo al thread che trova una "sezione critica" bloccata. Dice in molti punti che il thread viene "bloccato", ma cosa significa? È sospeso e riprenderà quando si solleverà la serratura? Oppure riproverà nella successiva iterazione del "ciclo di esecuzione"?Blocco mutex: cosa significa "blocco"?
La ragione per cui chiedo è perché voglio che gli eventi forniti dal sistema (mouse, tastiera, ecc.), Che (apparentemente) siano consegnati sul thread principale, vengano gestiti in una parte molto specifica del ciclo di esecuzione del mio filo secondario. Quindi, qualunque sia l'evento consegnato, faccio la fila nella mia stessa infrastruttura. Ovviamente, la struttura dati ha bisogno di un blocco mutex perché è stata modificata da entrambi i thread. Il pezzo mancante del puzzle è: cosa succede quando un evento viene consegnato in una funzione sul thread principale, voglio accodarlo, ma la coda è bloccata? Il thread principale sarà sospeso o salterà sopra la sezione bloccata e uscirà dall'ambito (perdendo l'evento)?
Il ciclo di esecuzione principale non è quello che guida l'applicazione. Sono su Mac OSX e uso un CVDisplayLink che genera in effetti un thread separato (ad alta priorità) che a sua volta guiderà il mio ciclo di esecuzione. Gli eventi, a quanto ho capito, verranno pubblicati sul thread principale, quindi la sincronizzazione sembra in ordine. – zmippie