std::set u. std::vector threadsafe?
-
Hi,
Hab 2 kurze fragen, ist ein set und/oder ein vector threadsafe?
Also kann man aus mehreren Threads Einträge hinzufügen (nicht löschen)?Danke und MfG
-
Warum sollten sie? Die C++ Standard Bibliothek bringt (noch) keine Mechanismen fuer Threads und Synchronisation mit.
-
OK. Etwas klarere Antwort: nein, sind sie nicht.
-
Man kann aber zumindest vernünftige Annahmen treffen, meistens ist es wohl möglich, aus mehreren Threads ohne Synchronisation zu lesen.
-
hustbaer schrieb:
OK. Etwas klarere Antwort: nein, sind sie nicht.
Noch etwas klarer:
Read: yes
Write: no
-
EOP schrieb:
hustbaer schrieb:
OK. Etwas klarere Antwort: nein, sind sie nicht.
Noch etwas klarer:
Read: yes
Write: noDer Standard schreibt es nicht vor, aber für die meisten Implementierungen hast du Recht.
-
Was soll denn synchronisiert werden, wenn ich nur lesend auf etwas zugreifen moechte? Welchen Sinn hat denn da ein Mutex, wenn die Daten nicht veraendert werden ...
-
knivil schrieb:
Was soll denn synchronisiert werden, wenn ich nur lesend auf etwas zugreifen moechte? Welchen Sinn hat denn da ein Mutex, wenn die Daten nicht veraendert werden ...
weil "nur lesend" recht relativ ist.
wenn zB ein interner cache geführt wird, ist eine lesezugriff zB durchaus problematisch.
sobald auf nicht thread lokale daten geschrieben wird, ists eben nicht mehr threadsafe auch wenn es logisch gesehen nur ein read ist...
-
also lesend hat es bei mir bislang immer geklappt, aber danke für die Antworten.

-
... nennt sich dann "Programming By Accident"
-
knivil schrieb:
Was soll denn synchronisiert werden, wenn ich nur lesend auf etwas zugreifen moechte? Welchen Sinn hat denn da ein Mutex, wenn die Daten nicht veraendert werden ...
Threadsafe ist ja auch nicht gleich Synchronisation. Schon eine globale/statische (nicht konstante) Variable in einer Funktion, die z.B. nur was berechnet, macht die Funktion nicht mehr threadsafe, weil dann ein Thread in der Funktion mit Werten aus dem anderen Thread rechnen könnte.