Domanda

ho partecipato ad un'intervista di oggi in cui l'intervistatore mi ha chiesto alla seguente domanda:

è ri-entrancy e mutua esclusione thread-safe? Può spiegare perché?

Sono relativamente nuovo per la programmazione concorrente e non poteva rispondere .. ma ho detto ...

mutua esclusione è sicuro thread. Ma re-entrancy non è e che è il motivo per cui abbiamo serrature rientranti.

L'intervistatore passa alla domanda successiva se in una zona diversa ... Penso che ho messo questo uno ...

Che cosa sta aspettando che io dica quando mi ha chiesto questo?

È stato utile?

Soluzione

risposta corretta dovrebbe essere:

Si sono implementazione della sicurezza Discussione.

re-entrancy

  

Scrittura di codice in modo che possa essere eseguito parzialmente da un compito, rientrato da un altro task, e quindi ripreso dal compito originale. Questo richiede il salvataggio di informazioni di stato in variabili locali per ciascun compito, di solito sulla sua pila, anziché in variabili statiche o globali.

     

Un esempio

La mutua esclusione

  

L'accesso ai dati condivisi è serializzato utilizzando meccanismi che garantiscono solo un thread legge o scrive i dati condivisi in qualsiasi momento. Grande attenzione è necessaria se un pezzo di codice accede a più parti condivise di data-problemi includono le condizioni di gara, deadlock, livelocks, la fame, e vari altri mali enumerati in molti sistemi operativi libri di testo.

     

Un esempio

Altri suggerimenti

Entrambi sono thread-safe - si può leggere anche su Wikipedia:
http://en.wikipedia.org/wiki/Reentrant_(subroutine) < br> http://en.wikipedia.org/wiki/Mutual_exclusion

mutex rientranti sono mutex che possono essere bloccati più volte dallo stesso filo se si garantisce che c'è un corrispondente sblocco per ciascun blocco.

http://en.wikipedia.org/wiki/Reentrant_(subroutine)

Entrambi i concetti della rientranza e sicurezza filo riguardano il modo funzioni gestiscono risorse. Tuttavia, essi non sono la stessa cosa.

Mentre il concetto di reentrancy può influenzare l'interfaccia esterna di una funzione, filo di sicurezza riguarda solo l'implementazione della funzione e non la sua interfaccia esterna.

-. Nella maggior parte dei casi, per effettuare una funzione rientrante non rientrante, la sua interfaccia esterna deve essere modificato in modo tale che tutti i dati sono forniti dal chiamante della funzione

-. Effettuare una filettatura-pericoloso funzione thread-safe, solo le esigenze di attuazione di essere cambiato, di solito con l'aggiunta di blocchi di sincronizzazione per proteggere le risorse condivise da accessi concorrenti da diversi fili

Pertanto, rientranza è una proprietà più fondamentale di filo di sicurezza e per definizione, porta a filo-sicurezza: Ogni funzione rientrante è thread-safe; Tuttavia, non tutte le funzioni thread-safe è rientrante.

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