<?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[Thread-Synchronisation via Konstruktor&#x2F;Destruktor]]></title><description><![CDATA[<p>Hi Leutz!</p>
<p>Hab mal eine generelle Frage bezüglich der Thread-Synchronisation und Klassen in C++:<br />
Wenn ich eine Klasse schreibe, die in ihrem Konstruktor automatisch eine Lock-Methode eines Thread-Synchronisations-Objekts aufruft, sodass durch das Erstellen des Objekts der Klasse automatisch ein bestimmter Vorgang synchronisiert wird und im Destruktor der Klasse die entsprechende Unlock-Methode implementiert ist...ist dieses Prinzip sicher/okay ?</p>
<p>Vielen Dank schonmal!</p>
<p>Grüße, Steve <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/181528/thread-synchronisation-via-konstruktor-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 09:43:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181528.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 May 2007 17:37:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Mon, 14 May 2007 17:37:08 GMT]]></title><description><![CDATA[<p>Hi Leutz!</p>
<p>Hab mal eine generelle Frage bezüglich der Thread-Synchronisation und Klassen in C++:<br />
Wenn ich eine Klasse schreibe, die in ihrem Konstruktor automatisch eine Lock-Methode eines Thread-Synchronisations-Objekts aufruft, sodass durch das Erstellen des Objekts der Klasse automatisch ein bestimmter Vorgang synchronisiert wird und im Destruktor der Klasse die entsprechende Unlock-Methode implementiert ist...ist dieses Prinzip sicher/okay ?</p>
<p>Vielen Dank schonmal!</p>
<p>Grüße, Steve <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1284852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284852</guid><dc:creator><![CDATA[Steve*]]></dc:creator><pubDate>Mon, 14 May 2007 17:37:08 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Mon, 14 May 2007 17:41:16 GMT]]></title><description><![CDATA[<p>Sicher in welcher Hinsicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284855</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 14 May 2007 17:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Mon, 14 May 2007 19:00:21 GMT]]></title><description><![CDATA[<p>Wenn die Unlock Methode garantiert nie fehlschlägt schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284897</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 May 2007 19:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Mon, 14 May 2007 21:23:15 GMT]]></title><description><![CDATA[<p>Hi, danke für Eure Antworten!</p>
<p>camper schrieb:</p>
<blockquote>
<p>Sicher in welcher Hinsicht?</p>
</blockquote>
<p>In Bezug auf die Sychronisation. Ist das damit dann wirklich sicher ?</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn die Unlock Methode garantiert nie fehlschlägt schon.</p>
</blockquote>
<p>Ähm was meinst Du mit 'fehlschlägt' ? Könntest Du mit dazu ein Beispiel geben?</p>
<p>Also ich habe beispielsweise folgenden Code (Windows-Code):</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

class CUserLock
{
   private:
     CRITICAL_SECTION m_cs;
     bool m_fInit, m_fLock;
   public:
     CUserLock  (void) : m_fLock(false), m_fInit(false) {}
     ~CUserLock (void) { Release(); }

     void Initialize (void) { if(!m_fInit){ InitializeCriticalSection(&amp;m_cs); m_fInit = true; ) }
     void Release    (void) { Unlock(); if(m_fInit){ DeleteCriticalSection(&amp;m_cs); m_fInit = false; } }
     void Lock       (void) { if(m_fInit &amp;&amp; !m_fLock){ EnterCriticalSection(&amp;m_cs); m_fLock = true; } }
     void Unlock     (void) { if(m_fInit &amp;&amp; m_fLock){ LeaveCriticalSection(&amp;m_cs); m_fLock = false; } }
};

class CAutoLock
{
   private:
     CUserLock* m_pLock;
   public:
     CAutoLock(CUserLock&amp; cLockObj) { m_pLock = &amp;cLockObj; m_pLock-&gt;Initialize(); m_pLock-&gt;Lock();}
     ~CAutoLock(CUserLock&amp; cLockObj) { m_pLock = &amp;cLockObj; m_pLock-&gt;Initialize(); m_pLock-&gt;Unlock();}
};
</code></pre>
<p>Verwendeung wäre dann:</p>
<pre><code class="language-cpp">// zum Beispiel global:
CUserLock g_cDataLock;
// ...
void func(void)
{
   CAutoLock(g_cDataLock);
   // Hier der sichere (?!) Code ;) .
}
</code></pre>
<p>Wär das so in jeder Situation in Ordnung (Falls nicht, wie sollte/müsste der Code denn korrekterweise aussehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> ) ? Danke schonmal für Eure Tipps <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="👍"
    /> !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284990</guid><dc:creator><![CDATA[Steve*]]></dc:creator><pubDate>Mon, 14 May 2007 21:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Mon, 14 May 2007 21:25:05 GMT]]></title><description><![CDATA[<p>Ups, sorry die Klasse CAutoLock muss natürlich so aussehen, sorry, vertippt:</p>
<pre><code class="language-cpp">class CAutoLock
{
   private:
     CUserLock* m_pLock;
   public:
     CAutoLock(CUserLock&amp; cLockObj) { m_pLock-&gt;Initialize(); m_pLock-&gt;Lock(); }
     ~CAutoLock(CUserLock&amp; cLockObj) { m_pLock-&gt;Unlock(); m_pLock-&gt;Release(); }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1284992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284992</guid><dc:creator><![CDATA[Steve*]]></dc:creator><pubDate>Mon, 14 May 2007 21:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Mon, 14 May 2007 23:38:40 GMT]]></title><description><![CDATA[<p>Das Initialize und Release sollte nicht in CAutoLock sondern in den Konstruktor/Destruktor von CUserLock.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285009</guid><dc:creator><![CDATA[---]]></dc:creator><pubDate>Mon, 14 May 2007 23:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Tue, 15 May 2007 08:14:58 GMT]]></title><description><![CDATA[<p>Hm okay, und sonst, ist der Code in jedem Fall sicher zum sychronisieren zu verwenden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285136</guid><dc:creator><![CDATA[Steve*]]></dc:creator><pubDate>Tue, 15 May 2007 08:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Synchronisation via Konstruktor&#x2F;Destruktor on Tue, 15 May 2007 15:08:08 GMT]]></title><description><![CDATA[<blockquote>
<p>Ähm was meinst Du mit 'fehlschlägt' ? Könntest Du mit dazu ein Beispiel geben</p>
</blockquote>
<pre><code class="language-cpp">// nicht ok, unlock kann fehlschlagen:
void MyLock::Unlock()
{
    if (!ReleaseMutex(m_mutexHandle))
        throw std::runtime_error(&quot;...&quot;);
}

// ok, kann nicht fehlschlagen:
void MyLock::Unlock()
{
    if (!ReleaseMutex(m_mutexHandle))
        terminate();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1285471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285471</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 15 May 2007 15:08:08 GMT</pubDate></item></channel></rss>