Synchronisierung in C++



  • Hallo zusammen,

    es gibt noch ne Frage, die ich mir stelle.
    Wie realisiert man in C++ einen synchronized-Block ala Java?
    Ich sehe zwei Möglichkeiten:
    Erstens: Man lockt explizit bei jedem Zugriff einen zugehörigen
    Mutex. Das hat allerdings den Nachteil, dass man immer wissen
    muss, ob es sich um einen Synchronisierfähiges Objekt handelt,
    denn jeder Thread kann ja auch ohne Lock draufzugreifen.
    Zweitens: Man überschreibt alle Methoden durch ein Lock,
    Ursprünglicher-Methodenaufruf, UnLock. In diesem Fall besteht
    der Nachteil aus 1. nicht, allerdings ist es viel Arbeit.

    Welche Strategien gibt es sonst noch bzw. welche verwendet ihr?
    Oder ist von einer der oberen abzusehen?

    Gruß,
    *Cpp-Anfänger*



  • Es gibt im C+-Standard kein Multithreating und damit auch keine Synchronisation.
    Pack deine Frage besser in das passende SubForum (WINAPI/Linux) oder versuchs
    mit boost::thread.



  • Das kommt darauf an welche API du nutzt. Und jede vernünftige Threading-API wird dir die passende Lock-Möglichkeiten anbieten. C++ kennt keine Thread-Schlüsselwörter da wir direkt das OS ansprechen können. 😃 Wenn du aber OS-unabhängig bleiben willst, mußt du einen der vielen Thread-Wrapper nutzen. Die kapseln das ganze. Boosts Thread Library ist da z.B. ein Kandidat. Ist auch einfach zu benutzen. Auf meiner Homepage findest du ein paar Infos dazu und natürlich bei Boost.org.



  • Ich glaub ich hab mich etwas unverständlich ausgedrückt.
    Die Verwendung von Threads und Mutex sind natürlich
    plattformabhängig. Die Boost-Thread-Library ist mir
    ebenfalls bekannt (auch wenn ich sie noch nicht verwendet hab).
    Mir geht es hier um eine konzeptionelle Verwaltung von derartigen
    Mechanismen.
    Es ist doch auf allen Plattformen so, dass man ein Objekt, das
    einen betriebssystemspezifischen Inhalt kapselt, lockt und wieder
    unlockt, oder? (bei Boost: boost::mutex)
    Worauf ich hinaus wollte ist ein Konzept zur Verwaltung derartiger
    Locks und Unlocks.

    Ich hoffe der Grund für mein Posting ist jetzt deutlicher geworden.


Log in to reply