RapidMax
07-10-2003, 20:12
Hallo
Wie sieht das nun aus mit der Thread-Sicherheit und C++. Sowohl bei der Suche im Netz als auch hier im Forum ist mir nicht ganz klar geworden, wie das nun ist und auf was ich achten muss.
Hier wird auf das Thema eingegangen:
http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/howto.html
Und hier ebenfalls:
http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_6
Ich habe vor: Verwendung von pthreads. Die Threads kommunizieren nur über Fifo's, bei welchen es sich im Wesentlichen um einen Wrapper handelt, der eine list<Message> über Mutex vor gemeinsamen Zugriff schützt. Innerhalb der Threads verwende ich natürlich auch strings, vectors etc. aus der stdlib, aber nicht über die Thread-Grenze hinweg.
Vorerst soll das Ziel sein, es auf einem System mit g++ (gcc) > 3 (aktuell 3.3.1) zum laufen zu bringen. Dieser linkt ja gegen die stdlibc++-v3.
Was mir jetzt nicht ganz klar ist:
- verwenden nun Die Standard-Container (und strings) einen gemeinsammen Allocator-Pool, der nicht thread-safe ist? (Wenn ja, wie umgehe ich das?)
- Die glibc ist, wie ich gesehen habe, threadsafe, also kann ich ohne weiteren Massnahmen z.B. nach stdout (cout) schreiben?
- wo gibt es sonst noch Probleme mit der Stdlib, auf die ich achten muss?
Hat jemand bereits damit Erfahrungen gesammelt, und kann mir ein paar Tips, oder Literatur dazu geben?
Gruss, Andy
Anmerkung: g++ sagt mit, dass er das Thread-Model posix verwendet und mit -dumpspecs liefert er u.a.: %{pthread:-D_REENTRANT}%{pthread:-lpthread} -> müsste also threadsafe sein?
Wie sieht das nun aus mit der Thread-Sicherheit und C++. Sowohl bei der Suche im Netz als auch hier im Forum ist mir nicht ganz klar geworden, wie das nun ist und auf was ich achten muss.
Hier wird auf das Thema eingegangen:
http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/howto.html
Und hier ebenfalls:
http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_6
Ich habe vor: Verwendung von pthreads. Die Threads kommunizieren nur über Fifo's, bei welchen es sich im Wesentlichen um einen Wrapper handelt, der eine list<Message> über Mutex vor gemeinsamen Zugriff schützt. Innerhalb der Threads verwende ich natürlich auch strings, vectors etc. aus der stdlib, aber nicht über die Thread-Grenze hinweg.
Vorerst soll das Ziel sein, es auf einem System mit g++ (gcc) > 3 (aktuell 3.3.1) zum laufen zu bringen. Dieser linkt ja gegen die stdlibc++-v3.
Was mir jetzt nicht ganz klar ist:
- verwenden nun Die Standard-Container (und strings) einen gemeinsammen Allocator-Pool, der nicht thread-safe ist? (Wenn ja, wie umgehe ich das?)
- Die glibc ist, wie ich gesehen habe, threadsafe, also kann ich ohne weiteren Massnahmen z.B. nach stdout (cout) schreiben?
- wo gibt es sonst noch Probleme mit der Stdlib, auf die ich achten muss?
Hat jemand bereits damit Erfahrungen gesammelt, und kann mir ein paar Tips, oder Literatur dazu geben?
Gruss, Andy
Anmerkung: g++ sagt mit, dass er das Thread-Model posix verwendet und mit -dumpspecs liefert er u.a.: %{pthread:-D_REENTRANT}%{pthread:-lpthread} -> müsste also threadsafe sein?