Sto cercando di implementare una libreria nativa condivisa (.so) per il sistema Android. Naturalmente, ci sono alcuni blocchi di codice che devono essere thread-safe.
Ho scoperto here che pthreads blocchi, mutex o variabili di condizione non sono supportati.
Mi piacerebbe sapere cosa viene solitamente utilizzato a livello di libreria per ottenere la sicurezza del thread?Sicurezza thread nelle librerie Android
risposta
Il modo in cui questo può essere raggiunto dipende dal fatto che si desidera che sia thread-safe quando si accede da thread a livello Java oppure è necessario sincronizzare i thread nativi con i thread Java.
Ci sono due modi per sincronizzare solo le discussioni a livello di Java:
1. Il modo più semplice è quello di aggiungere il sincronizzato parola chiave ai metodi nativi che accessibili con filettatura multipla, vale a dire
public native synchronized int sharedAccess();
2.Synchronization dal lato origini:
(*env)->MonitorEnter(env, obj);
... /* synchronized block */
(*env)->MonitorExit(env, obj);
Fare riferimento here su come sincronizzare le discussioni nativi con Java infila
c'è un video DevBytes here che discute filettatura nel NDK. Uno schema utile discusso nel video sta facendo le scritture atomiche usando __atomic_swap
nel codice nativo.
È possibile utilizzare un singleton thread-safe. Anche se questo non è più un metodo molto popolare di operazioni atomiche thread safe, dal momento che tutte le cose singleton sono pessime, (quindi non mi aspetto molti voti). È veloce, leggero e funziona ancora, è stato pesantemente utilizzato in smalltalk e per un periodo in Java ed è stato considerato un modello di progettazione chiave.
public class ThreadSafeSingleton {
private static final Object instance = new Object();
protected ThreadSafeSingleton() {
}
// Runtime initialization
public static Object getInstance() {
return instance;
}
}
Questa una versione caricata pigro ...
public class LazySingleton {
private Singleton() {
}
private static class LazyInstance {
private static final Singleton INSTANCE = new Singleton();
}
// Automatically ThreadSafe
public static Singleton getInstance() {
return LazyInstance.INSTANCE;
}
}
È possibile controllare questo post su Thread Safe Singletons in Java per maggiori informazioni.
- 1. Sicurezza thread di log4net
- 2. Funzione thread strtok sicurezza
- 3. Sicurezza thread di JTextArea.append
- 4. Sicurezza thread NSMutableDictionary
- 5. ActiveScaffold thread-sicurezza
- 6. WPF Sicurezza thread threading?
- 7. scopo della sezione .rel.dyn nelle librerie di sistema Android ELF
- 8. iBatis SqlMapClient e sicurezza thread
- 9. Rubrica sicurezza e prestazioni thread
- 10. Java StringBuilder e sicurezza thread
- 11. Contesto thread sicurezza Spring Security
- 12. C# RabbitMQ Client sicurezza thread
- 13. Sicurezza thread in classe Java
- 14. Sicurezza thread di ruby / rails
- 15. Sicurezza thread per coda STL
- 16. middleware rack e sicurezza thread
- 17. Sicurezza thread delle mappe C++
- 18. Sicurezza threading Android LruCache (Android 3.1)
- 19. Migliore sicurezza del tipo nelle raccolte Java
- 20. Problemi nell'utilizzo dei file xib nelle librerie
- 21. Politica di gestione delle eccezioni nelle librerie
- 22. Problemi nell'uso di srand() nelle librerie
- 23. Memorizza le librerie di codeigner nelle sottocartelle
- 24. Dati statici nelle librerie di sola intestazione
- 25. hashing JavaScript nelle chiamate di accesso AJAX, più sicurezza?
- 26. Eclipse "\ Librerie private Android" "Librerie di riferimento"
- 27. Lucene.NET, StandardAnalyzer, stopword e sicurezza thread
- 28. lucene buone prassi e sicurezza thread
- 29. panda e sicurezza del thread numpy
- 30. A cosa serve la sicurezza senza thread?
Ho paura di aver frainteso l'articolo. L'implementazione bionica per Android di ** pthreads ** è abbastanza completa. Non è completamente conforme a POSIX, ma è utile a tutti gli scopi pratici. I mutex e le condizioni vars che "non sono supportati" sono * inter-process *, che non sono rilevanti per la tua libreria nativa condivisa, lavorando in un'app Android sandbox. Android definisce altri meccanismi di comunicazione e sincronizzazione tra processi. –