Ich bin ein Informatikstudent, ich habe eine Aufgabe, die mich auffordert, Spinlock zu verwenden, um einen Thread zu sperren und ihn zu entsperren, sobald sein kritischer Abschnitt abgeschlossen ist. Die Schwierigkeit ist, dass ich viele Male gegoogelt habe, aber ich habe keine nützliche Information gefunden. Zum Beispiel habe ich versucht, Header wie #include <linux/spinlock.h>
einzuschließen, aber wenn ich gcc verwende, um dieses c Programm zu kompilieren, sagt es, kann solch eine Überschrift nicht finden. Also, welche Header sollte ich enthalten und welche Funktionen muss ich aufrufen, um Spinlock zu verwenden?Wie verwende ich Spinlock in Linux?
Antwort
linux/spinlock.h
ist ein Teil der Linux Kernel Header. Es ist kein Header für Linux Programm Entwicklung.
Spinlocks sind nur geeignet, wenn die konkurrierenden Threads auf verschiedenen Kernen ausgeführt werden. Außerhalb von Kernen und bestimmten spezialisierten Anwendungen, die genau steuern, welche Threads auf welchem Kern laufen, benötigen Sie einen geeigneten Mutex, keinen Spinlock. Suchen Sie den Pthread-Teil der Standardbibliothek, insbesondere die in pthread.h
deklarierten Funktionen pthread_mutex_xxx
.
Wenn die Zuweisung speziell nach einer spin Sperre fragt, dann könnte das Ziel für Sie sein, ein Spinlock als Lernübung zu implementieren. Wie das geht, hängt davon ab, welche Primitive Sie haben: Die Primitive, die einen Spinlock implementieren, hängen von der CPU ab und wie Sie darauf zugreifen können, hängt von der Programmiersprache (und von C im Compiler) ab.
- 1. Wie verwende ich PC-Lautsprecher in Linux?
- 2. Wie verwende ich crypt() in Linux?
- 3. Wie verwende ich Linux Grep Befehl?
- 4. Speicherbarrieren und Linux-Kernel spinlock auf TILE-Gx
- 5. SpinLock Skalierbarkeit und Einschränkungen
- 6. Spinlock vs beschäftigt warten
- 7. Alternative Barriere gegen Spinlock?
- 8. SpinLock werfen SynchronizationLockException
- 9. .NET 4 SpinLock
- 10. Wie verwende ich Docker (oder Linux Container) für die Netzwerkemulation?
- 11. Wie verwende ich den x86 Android Emulator unter Linux?
- 12. Wie verwende ich Linux-Befehl zum Extrahieren von Sequenzdaten
- 13. Linux Kernel: Spinlock SMP: Warum gibt es eine preempt_disable() in spin_lock_irq SMP-Version?
- 14. Wie verwende ich JSON-CPP?
- 15. Warum habe ich die schlechteste Leistung bei meiner Spinlock-Implementierung, wenn ich ein Nicht-CST-Speichermodell verwende?
- 16. Wie verwende ich {} in Emmet?
- 17. Wie kann ich herausfinden, welches Betriebssystem ich in Emacs verwende?
- 18. HPUX machinfo Äquivalent für Linux? oder Welche Hardware verwende ich?
- 19. In Linux, wie bekomme ich den vollständigen Pfad eines Befehls, den ich verwende?
- 20. Unterschied zwischen pthread_spinlock und boost :: smart_ptr :: spinlock?
- 21. die Definition von spinlock_t in Linux-Kernel
- 22. Wie verwende ich UUID?
- 23. Wie verwende ich ViewPropertyAnimatorCompat?
- 24. Wie verwende ich Mono.dematerialize()?
- 25. Wie verwende ich GeoDataApi.getPlaceById?
- 26. Wie verwende ich Flexbox?
- 27. Wie verwende ich AVAssetResourceLoader?
- 28. Wie verwende ich QTextBlock?
- 29. Wie verwende ich SGWTEE_HOME?
- 30. Wie verwende ich ViewContext?
Bitte posten Sie Ihren kompletten 'gcc' Befehl mit allen Argumenten. Ist das Argument '-I' (include path) korrekt? – Dai
Kernel-Header scheinen hier eine seltsame Wahl zu sein. Es gibt 'pthread_spin_init',' pthread_spin_lock', 'pthread_spin_unlock' und' pthread_spin_destroy' in '', die Sie verwenden könnten, aber das klingt wirklich so, als ob Sie Ihre eigene Drehsperre implementieren sollten. –
Wintermute