2016-10-30 6 views
1

Ich habe kürzlich von Reentrantlock gehört, die in Java verfügbar sind. Aber ich habe versucht, parallele Datenstrukturen wie Prioritätswarteschlangen mit openmp und C++ zu implementieren.Reentrantlock in openmp

Ich war neugierig zu wissen, ob eine ähnliche Entsprechung in Openmp und C++ existiert oder ob es mit Pthreads implementiert werden kann? Wenn es ein solches Äquivalent gibt, sagen Sie bitte, wie man es benutzt.

Antwort

1

Siehe die Beschreibung von omp_nest_lock auf Seite 270 (PDF Seite 279) in der OpenMP 4.5 standard.

Eine Meta-Frage ist "Warum machst du das?"
Warum verwenden Sie nicht einfach so etwas wie TBB's Concurrent Priority Queue?
Müssen Sie OpenMP aus anderen Gründen verwenden?
Ist dies für Ihre eigene Ausbildung?
Wenn nicht, dann könnte TBB ein einfacherer Ansatz sein (es ist jetzt Apache lizenziert).

(FWIW Ich arbeite für Intel, die TBB schrieb, aber ich arbeite auf OpenMP, nicht TBB :-))

+0

ich tue lab Projekt auf Parallele Datenstrukturen, bei denen die Implementierungen sollten in openmp erfolgen. Ich versuche, die lock-basierte Skip-List-Methode zu implementieren, die im Buch "Die Kunst der Multiprozessor-Programmierung - Maurice Herlihy & Nir Shavit" (Seiten 352 - 360) erwähnt wird. Dies erforderte die Implementierung von Reentrantlocks. Danke, dass Sie den Link zu der bereits implementierten Bibliothek angegeben haben. Aber um eine Vorstellung davon zu bekommen, wie die Dinge ablaufen und versuchen, Erfahrungen beim Schreiben paralleler Algorithmen und Datenstrukturen zu sammeln, habe ich versucht, dasselbe zu tun. – likecs

+0

Können Sie diese Aussage ein bisschen weiter ausarbeiten (Pg 272 aus dem obigen Buch): "Die Verwendung der gleichen OpenMP-Sperre in verschiedenen Wettbewerbsgruppen führt zu unspezifiziertem Verhalten." – likecs

+0

Da Sie bereits gesagt haben, dass dies ein Bildungsprojekt ist, werde ich Ihnen nur sagen, dass Sie die Definition einer "Streitgruppe" im Standard nachschlagen sollen :-) (Ein großer Teil des Lernens ist Lernen zu lernen!) –