<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION]]></title><description><![CDATA[<p>Ich hab grad einen Tipp bekommen, wenn ich ein automatischen Enter- und LeaveCriticalsection für jede Methode möchte, soll ich doch einfach an den anfang jeder methode ein objekt vom typ eines struct erzeugen in dessen Ctor und Dtor jeweils Enter und Leave aufgerufen werden ...</p>
<p>Meine frage an euch, kann man das eventuell irgendwie so arrangieren das bei JEDEM methodenaufruf dieser klasse (praktisch ne einrichtung in ner abstrakten klasse von der ich erbe) automatisch ein objekt von dem struct erzeugt wird ??</p>
<p>damit man sich das mit den critical sections sich praktisch ganz sparen kann ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175815/threadabsicherung-automatisches-enter-leave-critical_section</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 10:18:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175815.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Mar 2007 12:48:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 12:52:13 GMT]]></title><description><![CDATA[<p>Ich hab grad einen Tipp bekommen, wenn ich ein automatischen Enter- und LeaveCriticalsection für jede Methode möchte, soll ich doch einfach an den anfang jeder methode ein objekt vom typ eines struct erzeugen in dessen Ctor und Dtor jeweils Enter und Leave aufgerufen werden ...</p>
<p>Meine frage an euch, kann man das eventuell irgendwie so arrangieren das bei JEDEM methodenaufruf dieser klasse (praktisch ne einrichtung in ner abstrakten klasse von der ich erbe) automatisch ein objekt von dem struct erzeugt wird ??</p>
<p>damit man sich das mit den critical sections sich praktisch ganz sparen kann ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245377</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 14 Mar 2007 12:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 14:44:37 GMT]]></title><description><![CDATA[<p>Nein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245497</guid><dc:creator><![CDATA[Entenwickler wieder da]]></dc:creator><pubDate>Wed, 14 Mar 2007 14:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 15:01:46 GMT]]></title><description><![CDATA[<p>mühüüüst ^^ thx trotzdem</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245519</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 14 Mar 2007 15:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 15:14:33 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>...wenn ich ein automatischen Enter- und LeaveCriticalsection für jede Methode möchte, soll ich doch einfach an den anfang jeder methode ein objekt vom typ eines struct erzeugen in dessen Ctor und Dtor jeweils Enter und Leave aufgerufen werden ....</p>
</blockquote>
<p>Hi,</p>
<p>an und für sich ist diese Technik (RAII - Ressource Aquisition Is Initialization) eine tolle Stärke von C++ .... und auch gut für threadsafety zu verwenden.</p>
<p>Aaaaaaaber: Wenn Du jede Methode damit ausstattest, wird Dir irgendwann das gesamte Multithreading<br />
a) nichts mehr bringen (bestenfalls), weil sowieso keine 2 Threads mehr parallel ausgeführt werden können und/oder<br />
b) Du in der weitläufige &quot;Deadlockhölle&quot; versinken (worst case), weil der einzelne Thread über seine eigenen &quot;locks stolpert&quot;.</p>
<p>Vielleicht wusstest Du das schon, aber ich wollte es nicht unerwähnt lassen: Das richtige Locking ist eine seeeehr verzwickte Aufgabe und verlangt eine Menge Gehirnschmalz.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245533</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 14 Mar 2007 15:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 15:28:09 GMT]]></title><description><![CDATA[<p>Ein Thread kann nciht über seine eigenen locks stolpern, CRITICAL_SECTION und die Enter/Leave blockieren nur kontextabhängig also kann ich theoretisch 10 mal EnterCriticalSection(&amp;myCS) in einer Methode aufrufen ohne das er sich festfrisst .... kritisch wird es nur wenn ich irgendwo asynchron werd und nen callback aus nem anderen kontext erwarte der aber wegen nem gelockten Thread nicht ausgeführt wird ...</p>
<p>das mit der DeadlockHölle hab ich schon hinter mir ^^ da hab ich nu mittlerweilen einiges an routine und n paar OutputDebugString() kniffe hab ich mir schon einfallen lassen um nem deadlock auf die spur zu kommen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245541</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 14 Mar 2007 15:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 16:01:30 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>...<br />
das mit der DeadlockHölle hab ich schon hinter mir ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Glückwunsch !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Damit wollte wirklich nicht &quot;den Profi raushängen lassen&quot; (gäb's auch keinen Grund zu), sondern nur helfen, falls benötigt. Wird's nicht: Gut !<br />
Vielleicht frage ich Dich dann beim nächsten Mal, wenn ich Fragen zum Multithreading habe (allerdings nur für AIX). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245576</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 14 Mar 2007 16:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Wed, 14 Mar 2007 21:15:10 GMT]]></title><description><![CDATA[<p>in gewisser weise ist das möglich. zumindest für klassen.<br />
bzw. deren objekte. Habe aber im moment keinen c++ kompiler parat um das zu testen.</p>
<p>kannst dazu z.b. noch 2 weitere klassen schreiben, die dann alles automatisieren.</p>
<p>das &quot;framework&quot; sieht dann so aus:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct Handler
{
   explicit Handler(T* t) : t_(t) { EnterCriticalSection(); }
   ~Handler(){ LeaveCriticalSection(); }

   // funktioniert das?
   operator (T*) () { return t_; }
};

template &lt;typename T&gt;
struct ThreadSaveObject
{
   explicit ThreadSaveObject(T* t) : t_(t){}
   ~ThreadSaveObject(){ delete t_; }

   Handler operator-&gt;() return Handler(t_); }

   T* t_;
};
</code></pre>
<p>und benutzen wirst du das so</p>
<pre><code class="language-cpp">struct Foo{
   void a(){}
};

...

ThreadSaveObejct&lt;Foo&gt; obj(new Foo);
obj-&gt;a();
</code></pre>
<p>aber damit schiebst du den verwaltungsaufwand auf den benutzer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245778</guid><dc:creator><![CDATA[meister troll]]></dc:creator><pubDate>Wed, 14 Mar 2007 21:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 00:09:11 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>b) Du in der weitläufige &quot;Deadlockhölle&quot; versinken (worst case), weil der einzelne Thread über seine eigenen &quot;locks stolpert&quot;.</p>
</blockquote>
<p>Nur wenn das locking-primitive nicht &quot;rekursiv&quot; ist. Unter Windows (CRITICAL_SECTION, Mutex) kein Problem.</p>
<p>Mit PTHREADS ... schon eher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245821</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 15 Mar 2007 00:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 07:54:35 GMT]]></title><description><![CDATA[<p>@meister troll<br />
Deine idee ist gar nicht so übel, das liesse sich sogar vielleicht in ein schon vorhandenes objektdesign einarbeiten, wenn ich die zeit finde werd ich (was heißt hier ich, wir sind eigentlich 3) das mal so testen ^^</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@simon</a> ... fühltest du dich angegriffen ? ich kann deinen post irgendwie nicht interpretieren, falls ja, das war nie in meinem sinne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245865</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 15 Mar 2007 07:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 08:58:34 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>b) Du in der weitläufige &quot;Deadlockhölle&quot; versinken (worst case), weil der einzelne Thread über seine eigenen &quot;locks stolpert&quot;.</p>
</blockquote>
<p>Nur wenn das locking-primitive nicht &quot;rekursiv&quot; ist. Unter Windows (CRITICAL_SECTION, Mutex) kein Problem.</p>
<p>Mit PTHREADS ... schon eher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Eben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
... ich habe halt unter Windows noch nie multithreaded programmiert - und ansonsten nur ein wenig pthreads.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245891</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 15 Mar 2007 08:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:02:05 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>...@simon ... fühltest du dich angegriffen ? ich kann deinen post irgendwie nicht interpretieren, falls ja, das war nie in meinem sinne</p>
</blockquote>
<p>(Mist: Altes Problem mit &quot;Forenkommunikation&quot; - Ironie und &quot;Nichtironie&quot; sind schwer zu unterscheiden)</p>
<p>Nein - ich fühle mich nicht angegriffen, sondern wollte im Gegenteil klar machen, dass ich Dich auch nicht &quot;belehren&quot; wollte (damit Du Dich nicht angegriffen fühlst). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Meine Postings sind alle NICHT ironisch gemeint - ich habe einfach erkannt, dass ich Dir offensichtlich nicht weiterhelfen kann, weil Du auf dem Gebiet mehr Ahnung/Erfahrung hast als ich (was mir aber bei meinem ersten Posting nicht klar war).</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Auch in diesem post ist KEINE Ironie (Oh Gott - selbst das kann man ironisch (miß)verstehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245895</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:07:07 GMT]]></title><description><![CDATA[<p>GG jaja iss halt so n problem wa ^^</p>
<p>ich hab nur ne gewisse paranoya entwickelt weil, wenn ich schreibe ich manchmal überheblich wirke und doch immerwieder von irgendwo n <strong>troll</strong>iger kommentar kommt</p>
<p>also hier meine generalamnesie für überheblich wirkende posts:</p>
<p>es tut mir leid, es war nicht so gemeint und wenn es dennoch unverkennbar ist werd ich es auch überarbeiten, oder mich anschliessend förmlich entschuldigen, schliesslich kann jedem mal die &quot;hand ausrutschen&quot; :p</p>
<p>PS man sollte wirklich als gimick so ne art ironie-Tag in das board einbauen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245897</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:07:26 GMT]]></title><description><![CDATA[<p>Naja aufn ersten Blick ist die idee den zeigerzugriff zu abstrahieren und da zeugs zwischenzuschieben, pfiffig, aber aufn zweiten Blick in der Praxis greifen wirklich Simons Bedenken.<br />
Nen Object was jeglichen zugriff lockt, ist designtechnisch schon bedenktlich, und du solltest das multithreading problem noch mal ueberdenken.</p>
<p>In unserer Praxis fang ich sogar an, in den methodennamen zu kodieren, ob die methode seinen eigenen lock setzt oder nicht.</p>
<p>Ich mein, wenn du alles lockst, solltest du echt versuchen das MT aufzuloesen und alles in einem thread machen, das ist unkomplizierter und auch performanter.</p>
<p>wenn du deine threadas schoen entkoppelst und nen &quot;stimmiges&quot; design hasst, hasst du meist auch die schnittpunkte zwischen arbeitsthreads und dem oberflaechenthread ziemlich reduziert und brauchst nur an ganz wenig stellen locken ....<br />
das schlimmste iss nen design, wenn du objecte schreiben musst, wo jede methode von jedem thread aufgerufen werden kann, dann bist mehr mit locken und unlocken beschaeftigt (unter windows ned so kritisch, aber pthreads &amp; linux sollen da ned so performant sein).</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245898</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:12:36 GMT]]></title><description><![CDATA[<p>nunja wirklich JEDEN aufruf zu locken iss .... .... unklug! da haste recht ... da reicht es eigentlich wenn ich einfach nur das threadsave struct in den methoden erzeuge wo ich es auch wirklich brauche ... ich habs mir dennoch kopiert und werd mal schaun was mir dazu noch so einfällt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245901</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:26:45 GMT]]></title><description><![CDATA[<blockquote>
<p>da reicht es eigentlich wenn ich einfach nur das threadsave struct in den methoden erzeuge</p>
</blockquote>
<p>und genau dafuer langt doch der konventionelle weg.</p>
<p>du legst nen lokale CS an ....<br />
in methoden wo du nur kurze stuecke sperren musst und keine exceptions geworfen werden, kannst du haendisch locken ....</p>
<p>willst du ne komplette methode sperren, oder hasst exceptions drinne wo du wieder automatisch entsperren musst nimmst halt die objectlocks, also nen object dem die CS als parameter im constructor uebergibst, das ding sperrt/entsperrt das ding dann im Ctor/dtor</p>
<p>Mehr braucht man fuer einfachere Sachen eigentlich nicht, codetechnisch gesehen, fuer MT. Der Rest ist eigentlich das design drumherum ...</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245908</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:29:25 GMT]]></title><description><![CDATA[<p>Wenn du eh erstmal alle oder den größten Teil der Methoden Lockst, dann brauchst du auch kein Multithreading. Das Problem ist eben, das Shared-State-Multithreading sehr kompliziert ist. Verzichte daher am besten auch Shared-State-Multithreading und schicke die gemeinsam genutzten Daten lieber in Nachrichtenform zwischen den Threads/Prozessen hin und her. (Erlang-style Multithreading)</p>
<p>Mit MPI kannst du so etwas zB machen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245912</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to Threadabsicherung automatisches Enter&#x2F;Leave CRITICAL_SECTION on Thu, 15 Mar 2007 09:36:54 GMT]]></title><description><![CDATA[<p>naja hierbei geht es um zentrale ressourcen, ich habe mehrere clients die mit identischen daten versorgt werden müssen und da liegt der hase im pfeffer, das ist gar nicht SO einfach ... aber das thema hat sich eigentlich für mich erledigt, es funktioniert erstmal so</p>
<p>es war mehr als gedankenspiel gedacht, da hier sehr viele helle köpfe im forum sind und es hätte ja sein können das wer DIE IDEE hätte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245919</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:36:54 GMT</pubDate></item></channel></rss>