2016-11-26 6 views
0

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?

+0

Bitte posten Sie Ihren kompletten 'gcc' Befehl mit allen Argumenten. Ist das Argument '-I' (include path) korrekt? – Dai

+0

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

Antwort

1

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.

Verwandte Themen