<?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[Kopierkonstruktor und Threads]]></title><description><![CDATA[<p>Hallo,</p>
<p>in einer Multithreadanwendung habe ich für eine meiner Klassen einen Kopierkonstruktor vorgesehen. Mein Vorgehen ist immer so, daß ich die Member<br />
in der Initialisierliste bestücke. Als Beispiel mal folgende Signatur:<br />
'meinklasse::meineklasse( const meineklasse &amp;other)'. Die Klasse hat auch einen Lockmember. Nun wäre es doch möglich, das in der Zeit in der ich im Kopierkonstruktor die Member von 'other' auslese ein anderer Thread 'other' manipuliert. Besser wäre es doch dann die 'get'-Methoden zu benutzen oder was meint Ihr? Kleines Beispiel:</p>
<pre><code>// normalweweise:
meinklasse::meineklasse( const meineklasse &amp;other)
:memberA(other.memberA),
 memberB(other.memberB)
{
}

// mit Threads
meinklasse::meineklasse( const meineklasse &amp;other)
:memberA(other.getA()),
 memberB(other.getB())
{
}
</code></pre>
<p>Die 'get'-Methoden sind dann natürlich synchronisiert.<br />
Vielen Dank im voraus.</p>
<p>leftshift</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292813/kopierkonstruktor-und-threads</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 17:19:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292813.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Sep 2011 14:33:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopierkonstruktor und Threads on Sun, 18 Sep 2011 14:33:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>in einer Multithreadanwendung habe ich für eine meiner Klassen einen Kopierkonstruktor vorgesehen. Mein Vorgehen ist immer so, daß ich die Member<br />
in der Initialisierliste bestücke. Als Beispiel mal folgende Signatur:<br />
'meinklasse::meineklasse( const meineklasse &amp;other)'. Die Klasse hat auch einen Lockmember. Nun wäre es doch möglich, das in der Zeit in der ich im Kopierkonstruktor die Member von 'other' auslese ein anderer Thread 'other' manipuliert. Besser wäre es doch dann die 'get'-Methoden zu benutzen oder was meint Ihr? Kleines Beispiel:</p>
<pre><code>// normalweweise:
meinklasse::meineklasse( const meineklasse &amp;other)
:memberA(other.memberA),
 memberB(other.memberB)
{
}

// mit Threads
meinklasse::meineklasse( const meineklasse &amp;other)
:memberA(other.getA()),
 memberB(other.getB())
{
}
</code></pre>
<p>Die 'get'-Methoden sind dann natürlich synchronisiert.<br />
Vielen Dank im voraus.</p>
<p>leftshift</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120832</guid><dc:creator><![CDATA[leftshift]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:33:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Threads on Sun, 18 Sep 2011 14:42:27 GMT]]></title><description><![CDATA[<p>Der Clientcode (die aufrufende Funktion im selben Thread) wollte ja eine Kopie des Objekts zu dem Zeitpunkt des Aufrufs erstellen und ihm sollte auch bewusst sein, dass andere Threads dieses Objekt ebenfalls verwenden. Ich denke es sollte dem Client-Code obliegen, das Objekt zu locken, bevor er damit etwas anstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120838</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Threads on Sun, 18 Sep 2011 14:45:53 GMT]]></title><description><![CDATA[<p>Da hast Du auch wieder recht. <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/2120841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120841</guid><dc:creator><![CDATA[leftshift]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Threads on Sun, 18 Sep 2011 14:57:02 GMT]]></title><description><![CDATA[<p>Decimad schrieb:</p>
<blockquote>
<p>Der Clientcode (die aufrufende Funktion im selben Thread) wollte ja eine Kopie des Objekts zu dem Zeitpunkt des Aufrufs erstellen und ihm sollte auch bewusst sein, dass andere Threads dieses Objekt ebenfalls verwenden. Ich denke es sollte dem Client-Code obliegen, das Objekt zu locken, bevor er damit etwas anstellt.</p>
</blockquote>
<p>Grundsätzlich ja.</p>
<p>Bloss ... sobald eine Klasse eine eingebaute Mutex hat, um &quot;sich selbst&quot; threadsafe zu machen, erwarte ich auch, dass alle Operationen threadsafe sind.</p>
<p>Also entweder Mutex raus aus der Klasse, oder Copy-Ctor synchronisieren.<br />
Dann aber bitte nicht mittels get-Funktionen, denn auf die Art könnte sich zwischen den Aufrufen zweier Getter nochmal was ändern. Dann hättest du einen inkonsistenten Zustand kopiert.</p>
<p>Also lieber nix in der initializer-list machen, dann im Ctor-Rumpf die innere Mutex locken, und alle Member rüberkopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120849</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Threads on Sun, 18 Sep 2011 15:27:03 GMT]]></title><description><![CDATA[<p>Tja multithreading ist halt immer so eine Sache. Ich werde mir die Klasse nochmals genau anschauen ob sich der Lock innerhalb der Klasse überhaupt 'rechnet'. Zu feingranular sollte Locking ja auch wieder nicht sein.<br />
Vielen Dank für die Antworten.</p>
<p>leftshift</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120864</guid><dc:creator><![CDATA[leftshift]]></dc:creator><pubDate>Sun, 18 Sep 2011 15:27:03 GMT</pubDate></item></channel></rss>