<?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[threadsafety, mutexes &amp;amp; destruktoren]]></title><description><![CDATA[<p>Salut zusammen!</p>
<p>Ich hab mir ein par Gedanken zu Threadsafety gemacht und bin dabei auf die Frage gestossen, was denn passiert, wenn ich im Destruktor einen mutexlock anbringen will.<br />
Ist da grundsätzlich schon was falsch wenn ich sowas will?<br />
Ich stelle mir vor, dass ich eine gemeinsam genutzte Ressource habe. Der eine Thread will etwas daran verändern und löst einen Mutexlock aus. Der andere Thread nun, der die Ressource auch erstellt hatte, will diese jetzt wieder zerstören: Dann muss ich doch im Destruktor wieder den mutexlock callen, wodurch der Thread &quot;angehalten&quot; wird, da der andere noch an der Arbeit ist?</p>
<p>Aber in welchem Zustand befindet sich das Objekt jetzt? Ich habe mal was gelesen (wars ne Standarddefinition?), dass ein Objekt im Prinzip nicht mehr existiert, sobald der Destruktor aufgerufen wird, also auch schon bevor der fertig ausgeführt ist. Allerdings ist zu diesem Zeitpunkt doch noch aller Speicher alloziert, das Objekt wurde noch nicht wirklich zerstört..?</p>
<p>Ich würde das gerne geklärt haben, noch bevor ich dann irgend einen Murks mache <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>
<p>Merci vielmals!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281152/threadsafety-mutexes-amp-destruktoren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 20:48:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281152.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Jan 2011 15:11:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to threadsafety, mutexes &amp;amp; destruktoren on Thu, 27 Jan 2011 15:11:01 GMT]]></title><description><![CDATA[<p>Salut zusammen!</p>
<p>Ich hab mir ein par Gedanken zu Threadsafety gemacht und bin dabei auf die Frage gestossen, was denn passiert, wenn ich im Destruktor einen mutexlock anbringen will.<br />
Ist da grundsätzlich schon was falsch wenn ich sowas will?<br />
Ich stelle mir vor, dass ich eine gemeinsam genutzte Ressource habe. Der eine Thread will etwas daran verändern und löst einen Mutexlock aus. Der andere Thread nun, der die Ressource auch erstellt hatte, will diese jetzt wieder zerstören: Dann muss ich doch im Destruktor wieder den mutexlock callen, wodurch der Thread &quot;angehalten&quot; wird, da der andere noch an der Arbeit ist?</p>
<p>Aber in welchem Zustand befindet sich das Objekt jetzt? Ich habe mal was gelesen (wars ne Standarddefinition?), dass ein Objekt im Prinzip nicht mehr existiert, sobald der Destruktor aufgerufen wird, also auch schon bevor der fertig ausgeführt ist. Allerdings ist zu diesem Zeitpunkt doch noch aller Speicher alloziert, das Objekt wurde noch nicht wirklich zerstört..?</p>
<p>Ich würde das gerne geklärt haben, noch bevor ich dann irgend einen Murks mache <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>
<p>Merci vielmals!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2013124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2013124</guid><dc:creator><![CDATA[c++quest]]></dc:creator><pubDate>Thu, 27 Jan 2011 15:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafety, mutexes &amp;amp; destruktoren on Thu, 27 Jan 2011 15:17:27 GMT]]></title><description><![CDATA[<p>Wenn du mich fragst läuft da etwas grundsätzlich falsch wenn ein Thread eine gemeinsam benutzte Ressource zerstören kann während ein anderer Thread diese noch benutzt bzw. ein Thread überhaupt noch auf die Idee kommen kann eine Ressource zu benutzen die gerade von einem andere Thread zerstört wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2013127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2013127</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 27 Jan 2011 15:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafety, mutexes &amp;amp; destruktoren on Thu, 27 Jan 2011 15:46:58 GMT]]></title><description><![CDATA[<p>EDIT: ist eigentlich nur nochmal das was dot schon geschrieben hat, nur etwas ausschweifender formuliert <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/869">@c</a>++quest:<br />
Wenn du in einer Klasse im Destruktor eine Mutex locken willst.<br />
Und wenn diese Klasse nicht selbst einen Thread &quot;hat&quot;, den sie im Destruktor dann beenden möchte ... dann hast du ein grundlegendes Problem.</p>
<p>In dem von dir beschriebenen Fall gibt es nur zwei Möglichkeiten:</p>
<ol>
<li>
<p>Aufrufe von Memberfunktionen und Destruktor können sowieso nie &quot;concurrent&quot; aus verschiedenen Threads erfolgen, weil irgend ein externer Mechanismus das verhindert. In dem Fall ist alles eitel Wonne und du brauchst die Mutex im Destruktor nicht zu locken.</p>
</li>
<li>
<p>Aufrufe von Memberfunktionen und Destruktor können concurrent erfolgen. Dann kannst du aber auch nicht sicherstellen was zuerst passiert, der Aufruf des Destruktors oder der Aufruf der Memberfunktion. Du hast also eine Situation, wo es passieren könnte, dass zuerst der Destruktor aufgerufen wird, und dann erst die Memberfunktion. Und das ist ganz einfach ein Fehler. Diesen Fehler musst du beheben, dann hast du Situation (1), und musst die Mutex im Destruktor nicht locken.</p>
</li>
</ol>
<p>----</p>
<p>Was Klassen angeht die selbst Threads verwalten: hier kann es vollkommen OK und auch notwendig sein im Destruktor eine Mutex zu locken, nämlich wenn du den Threads z.B. mitteilen möchtest dass sie sich beenden sollten. Mutex locken -&gt; &quot;end&quot; Flag setzen -&gt; Mutex unlocken -&gt; auf Beendigung vom Thread warten.</p>
<p>Notwendig ist es dann, wenn die Thread-Funktion auf das Objekt zugreift. Dann muss sichergestellt sein dass diese beendet ist, bevor das Objekt zerstört wird. Und in dem Fall ist es auch kein Problem, wenn man das so macht - das Objekt ist bis zur Beendigung des Destruktors in einem gültigen Zustand, und man darf darauf zugreifen.<br />
Genau so ist das Objekt mit Beginn (!) des Konstruktors in einem gültigen Zustand - obwohl es erst nach Beendigun des Konstruktors (ohne Exception) &quot;fully constructed&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2013147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2013147</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 27 Jan 2011 15:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafety, mutexes &amp;amp; destruktoren on Thu, 27 Jan 2011 15:55:24 GMT]]></title><description><![CDATA[<p>Wunderbar, vielen Dank hustbaer!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2013155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2013155</guid><dc:creator><![CDATA[c++quest]]></dc:creator><pubDate>Thu, 27 Jan 2011 15:55:24 GMT</pubDate></item></channel></rss>