<?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[Scoped Locks und Destruktion]]></title><description><![CDATA[<p>Hi,</p>
<p>bei meiner Frage geht es zwar um Multithreading aber mich interessiert hier der C++ Aspekt.</p>
<p>Ich habe z.b. eine Klasse ScopedLock</p>
<pre><code class="language-cpp">template&lt; typename SyncType &gt;
  class ScopedLock : NotCopyable
  {
    SyncType &amp; sync;
  public:
    ScopedLock( SyncType &amp; s ):sync(s){ sync.lock(); }
    ~ScopedLock(){ sync.unlock(); }
  };
</code></pre>
<p>Nun habe ich in einer Klasse eine Methode in der ich 2 verschiedene Mutexe nutzen muss:</p>
<pre><code class="language-cpp">void SomeClass::foo()
{
  ScopedLock&lt; Mutex &gt; lock1(mutex1);
  ScopedLock&lt; Mutex &gt; lock2(mutex2);
  // Do foo
}
</code></pre>
<p>Nun frage ich mich ob garantiert wird das der Destruktor von lock2 zuerst aufgerufen wird ( wegen dem unlock() ) und dannach erst der Destruktor lock1</p>
<p>Sollte dem nicht so sein hab ich nämlich ein Problem wenn ich das wie oben schreibe.</p>
<p>Oder bin ich gezwungen das so zu verwenden?</p>
<pre><code class="language-cpp">void SomeClass::foo()
{
  ScopedLock&lt; Mutex &gt; lock1(mutex1);
  {
    ScopedLock&lt; Mutex &gt; lock2(mutex2);
    // Do foo
  }
}
</code></pre>
<p>Die Frage ist rein hypothetisch aber würde mich trotzdem brennend interessieren.</p>
<p>BR</p>
<p>evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126028/scoped-locks-und-destruktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 12:36:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126028.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Nov 2005 10:29:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Scoped Locks und Destruktion on Fri, 11 Nov 2005 10:29:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>bei meiner Frage geht es zwar um Multithreading aber mich interessiert hier der C++ Aspekt.</p>
<p>Ich habe z.b. eine Klasse ScopedLock</p>
<pre><code class="language-cpp">template&lt; typename SyncType &gt;
  class ScopedLock : NotCopyable
  {
    SyncType &amp; sync;
  public:
    ScopedLock( SyncType &amp; s ):sync(s){ sync.lock(); }
    ~ScopedLock(){ sync.unlock(); }
  };
</code></pre>
<p>Nun habe ich in einer Klasse eine Methode in der ich 2 verschiedene Mutexe nutzen muss:</p>
<pre><code class="language-cpp">void SomeClass::foo()
{
  ScopedLock&lt; Mutex &gt; lock1(mutex1);
  ScopedLock&lt; Mutex &gt; lock2(mutex2);
  // Do foo
}
</code></pre>
<p>Nun frage ich mich ob garantiert wird das der Destruktor von lock2 zuerst aufgerufen wird ( wegen dem unlock() ) und dannach erst der Destruktor lock1</p>
<p>Sollte dem nicht so sein hab ich nämlich ein Problem wenn ich das wie oben schreibe.</p>
<p>Oder bin ich gezwungen das so zu verwenden?</p>
<pre><code class="language-cpp">void SomeClass::foo()
{
  ScopedLock&lt; Mutex &gt; lock1(mutex1);
  {
    ScopedLock&lt; Mutex &gt; lock2(mutex2);
    // Do foo
  }
}
</code></pre>
<p>Die Frage ist rein hypothetisch aber würde mich trotzdem brennend interessieren.</p>
<p>BR</p>
<p>evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/914819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/914819</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Fri, 11 Nov 2005 10:29:03 GMT</pubDate></item><item><title><![CDATA[Reply to Scoped Locks und Destruktion on Fri, 11 Nov 2005 10:30:56 GMT]]></title><description><![CDATA[<p>Afaik werden Destruktoren immer in umgekehrter Reihenfolge zu den Konstruktoren aufgerufen, d.h. in deinem Beispiel erst lock2, dann lock1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/914823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/914823</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Fri, 11 Nov 2005 10:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to Scoped Locks und Destruktion on Fri, 11 Nov 2005 10:37:02 GMT]]></title><description><![CDATA[<p>CStoll (off) schrieb:</p>
<blockquote>
<p>Afaik werden Destruktoren immer in umgekehrter Reihenfolge zu den Konstruktoren aufgerufen, d.h. in deinem Beispiel erst lock2, dann lock1.</p>
</blockquote>
<p>richtig, das problem an diesem code ist eher der potentielle deadlock beim konstruieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/914833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/914833</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 11 Nov 2005 10:37:02 GMT</pubDate></item></channel></rss>