Ich versuche, eine native Shared Library (.so) für das Android-System zu implementieren. Natürlich gibt es einige Codeblöcke, die threadsicher sein müssen.
Ich fand here, dass Pthreads Sperren, Mutexe oder Zustandsvariablen nicht unterstützt werden.
Ich würde gerne wissen, was normalerweise auf der Ebene der Bibliothek verwendet wird, um Thread-Sicherheit zu erreichen?Threadsicherheit in Android-Bibliotheken
Antwort
Wie dies erreicht werden kann, hängt davon ab, ob es nur threadsicher sein soll, wenn Java-Threads darauf zugreifen, oder native Threads mit Java-Threads synchronisiert werden müssen.
Es gibt zwei Möglichkeiten nur Java Ebene Threads zu synchronisieren:
1.Die einfachste Weg ist, hinzuzufügen, um das synchronisierte Schlüsselwort zu den nativen Methoden, die durch Mehrfachgewinde, dh
public native synchronized int sharedAccess();
zugänglich
2.Synchronization von der nativen Seite:
(*env)->MonitorEnter(env, obj);
... /* synchronized block */
(*env)->MonitorExit(env, obj);
Siehe here wie native Threads synchronisieren mit Java-Threads
Es gibt ein DevBytes Video here, die in den NDK bespricht Threading. Ein nützliches Muster, das in dem Video diskutiert wird, ist atomare Schreibvorgänge unter Verwendung von __atomic_swap
im systemeigenen Code.
Sie könnten ein thread safe-Singleton verwenden. Dies ist zwar keine sehr populäre Methode des threadsicheren Atombetriebs, da alle Dinge Singleton schlecht sind (also erwarte ich nicht viele Ups). Es ist schnell, leichtgewichtig und funktioniert immer noch, es wurde stark in Smalltalk und zeitweise in Java verwendet und galt als ein Schlüsseldesignmuster.
public class ThreadSafeSingleton {
private static final Object instance = new Object();
protected ThreadSafeSingleton() {
}
// Runtime initialization
public static Object getInstance() {
return instance;
}
}
Dies ist eine faule geladene Version ...
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;
}
}
Sie können für mehr Info auf Thread Safe Singletons in Java diesen Beitrag sehen.
- 1. SharedPreferences und Threadsicherheit
- 2. Frühling Singleton Threadsicherheit
- 3. Threadsicherheit von WeakReference
- 4. CoreSpotlight Standardindex Threadsicherheit
- 5. MongoDB C# Treiber und Threadsicherheit
- 6. Java CDI @PersistenceContext und Threadsicherheit
- 7. Objektsperre funktioniert nicht für Threadsicherheit
- 8. Java: statische Factory-Methode und die Threadsicherheit
- 9. Threadsicherheit in Parametern, die an eine statische Methode übergeben wurden
- 10. Threadsicherheit der C# -Liste <T> für Leser
- 11. Threadsicherheit: Mehrere Threads, die von einer einzelnen const-Quelle lesen
- 12. So überprüfen Sie die Threadsicherheit der Rails-App für Puma
- 13. Threadsicherheit eines Instanzelements, das über Zugriffsmodule abgerufen wird
- 14. Ist der Go Bytes.Buffer Thread-sicher?
- 15. Sind verschiedene Threads auf verschiedenen Instanzen von JavascriptSerializer oder JavascriptDeserializer Thread sicher
- 16. msdn: Was ist "Gewindesicherheit"?
- 17. CPython und Threading-Modul Lock()
- 18. Thema sicher Mersenne-Twister-
- 19. NSMutableDictionary Thread Sicherheit
- 20. Wie kann man die ARC-kompatible und die `init`-sichere Singleton-Klasse korrekt implementieren?
- 21. Minimal-lock thread-safe hashtable?
- 22. Wie schränkt man eine Methode auf einen bestimmten Thread ein?
- 23. Welchen Warp- und Snap-Server von Yesod sollte ich für einen Hochleistungs-Anwendungsserver wählen?
- 24. Brauchen wir Thread-Sicherheit, wenn auf Cache von mehreren Prozessen zugegriffen wird (Redis)
- 25. C# Zufallszahlengenerator, der in einem Zyklus stecken bleibt
- 26. Threadsicherer Zugriff auf mehrere gleichzeitige Datenstrukturen
- 27. android Synchronisierungsmethoden über Prozesse hinweg
- 28. Python MultiProcessing Aktualisieren der globalen Variablen
- 29. Rufe zwischen statischen Methoden - wird das die Sicherheit von Folienfäden verbessern? Ich
- 30. Wie sollten wir uns mit Thread-Sicherheit mit JSF-verwalteten Beans befassen?
Ich fürchte, Sie haben den Artikel missverstanden. Android bionische Implementierung von ** Pthreads ** ist ziemlich vollständig. Es ist nicht vollständig POSIX-konform, aber für alle praktischen Zwecke geeignet. Die Mutexe und Bedingungsvariablen, die "nicht unterstützt werden" sind * prozessübergreifende *, die für Ihre native, gemeinsam genutzte Bibliothek nicht relevant sind und in einer Sandkasten-Android-App funktionieren. Android definiert andere prozessübergreifende Kommunikations- und Synchronisationsmechanismen. –