Il thread del tipo di mappa Go è sicuro? Ho un programma che ha molte goreutine che leggono e scrivono su un tipo di mappa. Se devo implementare un meccanismo di protezione, qual è il modo migliore per farlo?La struttura della mappa di go è thread-safe?
risposta
Vorresti utilizzare le goroutine e sincronizzare l'accesso alle tue mappe tramite channels. Spiegazione da the FAQ:
Dopo lunga discussione è stato deciso che l'utilizzo tipico di mappe ha non richiedere l'accesso sicuro da più thread, e in quei casi in cui lo ha fatto, la mappa era probabilmente parte di alcuni dati più grande struttura o calcolo già sincronizzato. Pertanto, richiedendo che tutte le operazioni sulla mappa assumano un mutex, tutte le operazioni sulla mappa effettuano il rallentamento della maggior parte dei programmi e aggiungano la sicurezza dello a pochi. Questa non è stata una decisione facile, tuttavia, dal momento che significa l'accesso alla mappa incontrollato può mandare in crash il programma.
La lingua non preclude gli aggiornamenti delle mappe atomiche. Quando richiesto, come come quando si ospita un programma non attendibile, l'implementazione potrebbe accedere alla mappa.
- 1. convenzione struttura della struttura del progetto go-lang
- 2. Mappa della struttura dati di Maps
- 3. Java: ServerSocket.accept è threadsafe?
- 4. È NSUserDefaults threadsafe
- 5. Posso definire una mappa la cui chiave è una struttura?
- 6. Mappa di NHibernate e struttura
- 7. Come memorizzare una struttura all'interno di una struttura in go?
- 8. Variabile di struttura di incremento in go
- 9. java.util.concurrent.Future threadsafe?
- 10. estrazione della gerarchia di directory utilizzando la lingua go
- 11. La struttura dati della corda
- 12. Inizializza la struttura della cartella di cetrioli?
- 13. come serializzare/deserializzare una mappa in go
- 14. annotazione chiamato ThreadSafe
- 15. Datastax - Is PreparedStatement threadsafe?
- 16. È buona norma nascondere la definizione della struttura in C?
- 17. Mappa di struct vs array di struct in Go
- 18. La seconda parte della mappa è <..,..> stabile?
- 19. Proprietà threadsafe generica
- 20. Come inizializzare correttamente pigro Mappa della mappa della mappa?
- 21. @GuardedBy, @ThreadSafe, @ NotThreadSafe
- 22. come aumentare la dimensione di allocazione di una mappa nella lingua GO?
- 23. Ruby's Net :: HTTP threadsafe?
- 24. Come posso rendere AllocateHwnd threadsafe?
- 25. È random_shuffle threadsafe? e usando rand_r se non lo è
- 26. Chiamare un metodo puntatore su una struttura in una mappa
- 27. perché la struttura del gioco è scaduta?
- 28. Swift calcola la dimensione errata della struttura
- 29. Mostra la struttura della tabella in SQL
- 30. Buona struttura per il gioco di Go (weiqi, baduk)?
È consigliabile ma devono comunque documentare e mantenere quali funzioni sono sicure. Spesso mi imbatto in codice dove in pass1 riempio una mappa con valori e in pass2 la leggo contemporaneamente da molti thread diversi senza una singola sincronizzazione. – Lothar
Lo stile Go sembra fortemente ponderato per non utilizzare mai lo stato mutabile condiviso. Se stai leggendo semplicemente la mappa da fili diversi, dovresti stare bene. (Anche se questo non è assolutamente ovvio: esistono plausibili implementazioni di mappe che sono fisicamente mutate su letture logiche ...) – poolie