Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Threadsafe C++ stdlib

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320

    Threadsafe C++ stdlib

    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/libstd...tro/howto.html

    Und hier ebenfalls:
    http://gcc.gnu.org/onlinedocs/libstd...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?

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Ok, die STL scheint threadsafe zu sein. Bis jetzt läuft es. Mich hat nur verwirrt, dass nach einem Segmentation Fault beim Backtrace was von Allocator angezeigt wurde. Der Fehler liess sich allerdings auf was anderes zurückführen.

    Ich hoffe im Belastungstest passiert nicht doch noch was....

    Gruss, Andy

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich glaube std::string ist nicht threadsafe!
    Die Klasse benutzt AFAIK Copy-on-Write und benutzt implizites sharing.

    Kann aber sein, dass meine Infos da nicht akutell sind.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Das würde meine bisherigen Erkenntnisse bestätigen: In dem Stack, den ich benutze, machen sie regen Gebrauch von den STL-Container, einzig ein std::string ist nirgends zu finden, dafür haben sie ein eigene Implementation geschrieben.

    Allerdings ist der Stack recht portabel, so dass es auch sein kann, dass die STL-Implementation, die ich verwende thread-safe ist, aber andere nicht. (Wird auch in den oben erwähnten Links erwähnt).

    Nun, dann suche ich mir einen Ersatz, oder schreibe es selber... Kennt jemand einen Ersatz?

    Danke und Gruss
    Andy

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du könntest schaun, ob eventuell die Boost Library entsprechende threadsafe Klassen hat.
    www.boost.org

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320

    Boost ist ok

    Aber dann habe ich noch ein Abhängigkeit. Ich dachte eher an eine einfache Implementation einer String-Klasse (I/O-Operatoren und grundlegende String-Verarbeitungs-Operatoren). Unter der GPL-Lizenz, mehr ein Code-Schnippsel als eine Library.

    Naja, das bringe ich selber noch hin.

    Gruss, Andy

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du könntest in der TinyQ nachsehen.
    Das sind ein paar essentielle Qt Klassen unter GPL in einer kleinen Lib
    Unter anderem QString, QCString

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Ok, Danke vielmals

    Gruss, Andy

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •