2017-04-05 2 views
0

Ich habe mich auf SO umgeschaut, aber keine Antwort darauf gefunden: Bei der Erstellung von Pthread-Mutexen in einem Linux-Userspace-Programm, welche Richtlinie haben diese Mutexe standardmäßig? Siehe https://linux.die.net/man/3/pthread_mutexattr_setprotocolStandard-Prioritätsvererbungsrichtlinie von Pthread-Mutexen unter Linux?

Es scheint die beste Standardrichtlinie Priorität Obergrenze wäre, dh PTHREAD_PRIO_PROTECT, zumindest für meine Anwendung;)

Außerdem kann ich Prioritätsvererbung Politik gesetzt auf C++ std :: mutexes auch, vermute ich, ein C++ std :: mutex wird sowieso ein ftex in Linux sein, ebenso wie pthread mutexes?

Antwort

0

Nach dem POSIX standard:

Der Standardwert des Attributs wird PTHREAD_PRIO_NONE sein.

Leider gibt es keine Möglichkeit, dies auf einem std::mutex zu setzen, soweit ich weiß. Es gibt eine std::mutex::native_handle Funktion, die verwendet werden kann, um Zugriff auf die zugrunde liegende pthread_mutex_t * zu erhalten. Es ist aber schon zu spät alle Attribute auf, es zu ändern, da pthread_mutex_init vom std::mutex Konstruktor ausgeführt wird, und nach den POSIX standard again:

Versuch, ein bereits initialisiert Mutex Ergebnisse in undefiniertem Verhalten zu initialisieren.

+0

Vielen Dank für eine schnelle und kurze Antwort, akzeptiert. Ich denke, ich werde C++ - Standard-Threads mit nackten Posix-Mutexen verwenden müssen, da ich PTHREAD_PRIO_NONE nicht möchte. Ich kann wahrscheinlich RAII Entsperren des Mutex sowieso mit einigen RAII Wrapper erreichen. Btw, wäre schön, wenn die Linux-Manpage Informationen über die Standard-Policy enthält. –