GCC Threadsafe?
-
Wie bekomme ich g++ dazu, eine Thread-Sicher std-lib zu linken?
Ich habe aktiell die linkerschalter -pthread und, weil irgendwo gefunden, --enable-threads aktiviert, allerdings habe ich ein Problem, das für sich isoliert nicht auftritt und irgendwo nach einem Race in der std-lib aussieht. (Ist die std-lib so threadsafe muss ich einen anderen Schuldigen suchen
)
-
was genau machst du und wo hast du den fehler isoliert?
mir ist nicht bekannt, dass es eine version der gnu-std-c++-lib gibt, die thread-safe ist. sie sollte aber reentrant sein. also kein gleichzeitiger zugriff egal ob lesend oder schreibend auf eine instanz (und bei den iteratoren besonders aufpassen, da deren verhalten nach schreibenden zugriffen undefiniert wird, was man bei parallelem bearbeiten leicht übersehen kann.), also alle schreib- und auch lesezugriffe in mutexe packen.
ansonsten kann man aber problemlos verschiedene instanzen der gleichen klasse in verschiedenen threads nutzen.
-
Es geht um Konsolen I/O.
Eine einfache Konsolenausgabe gefolgt von einem std::getline()
Das einleseverhalten ist deutlich different abhängig davon ob ich die eingabe etwas verzöger usw.
non-threaded Testcode sieht so aus:
#include <iostream> #include <string> int main() { std::cout << "was darf's sein?" << std::flush; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::string foo; std::getline(std::cin, foo); std::cout << foo << std::endl; }
-
greifst du von mehr als einem thread auf die konsole zu? das sollte man generell unterlassen, da es eigentlich nur streß macht oder wenn es unbedingt sein muss, sollte man auf jeden fall alle zugriffe absichern. insbesondere die lesenden, aber auch die schreibenden, da du dir dort sonst die puffer zerfetzen kannst.
-
Der Zugriff erfolgt aktuell uU noch über mehrere Threads. Locking kommt nicht in Frage, ich denke mal ich werde mit den Schwierigkeiten erstmal leben müssen, das ganze läuft, wenns fertig ist, sowieso über GUI da macht mir jetzt ein Locking für das KonsolenIO zum test zu viel Stress.
Wäre nur schön gewesen wenn man da einfach was Schalten könnte (Ist es überhaupt möglich sowas threadsafe zu implementieren für die stdlib?)
-
darthdespotism schrieb:
Locking kommt nicht in Frage...
wieso nicht?