<?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[ThreadSafe - get-Fuktion]]></title><description><![CDATA[<p>Hi,</p>
<p>wenn man eine Klasse hat, die z.B. eine get-Funktion anbietet:</p>
<pre><code class="language-cpp">int getNumber() { return number; }
</code></pre>
<p>Wie macht man das dann Threadsafe? Mutex, etc. kommt hier ja nicht in Frage, da nach dem <code>return</code> kein Code mehr ausgeführt wird.<br />
Ich müsste also über Referenzen gehen, oder?</p>
<pre><code class="language-cpp">void getNumber(int&amp; num) { num = number; }
</code></pre>
<p>Nun müsste ich zwischen der Zuweisung eben Lock und Unlock aufrufen, ja?</p>
<pre><code class="language-cpp">void getNumber(int&amp; num) { lock();  num = number; unlock(); }
</code></pre>
<p>Und darauf greife ich dann so zu:</p>
<pre><code class="language-cpp">int val;

myClass.getNumber(val);
</code></pre>
<p>Aber auf <strong>keinen(!)</strong> Fall so:</p>
<pre><code class="language-cpp">int&amp; val

myClass.getNumber(val);
</code></pre>
<p>Habe ich das richtig verstanden oder handel ich mir damit Probleme ein?</p>
<p>Vielen Dank,<br />
Paty</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245462/threadsafe-get-fuktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 18:42:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245462.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Jul 2009 14:33:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Tue, 14 Jul 2009 14:33:01 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wenn man eine Klasse hat, die z.B. eine get-Funktion anbietet:</p>
<pre><code class="language-cpp">int getNumber() { return number; }
</code></pre>
<p>Wie macht man das dann Threadsafe? Mutex, etc. kommt hier ja nicht in Frage, da nach dem <code>return</code> kein Code mehr ausgeführt wird.<br />
Ich müsste also über Referenzen gehen, oder?</p>
<pre><code class="language-cpp">void getNumber(int&amp; num) { num = number; }
</code></pre>
<p>Nun müsste ich zwischen der Zuweisung eben Lock und Unlock aufrufen, ja?</p>
<pre><code class="language-cpp">void getNumber(int&amp; num) { lock();  num = number; unlock(); }
</code></pre>
<p>Und darauf greife ich dann so zu:</p>
<pre><code class="language-cpp">int val;

myClass.getNumber(val);
</code></pre>
<p>Aber auf <strong>keinen(!)</strong> Fall so:</p>
<pre><code class="language-cpp">int&amp; val

myClass.getNumber(val);
</code></pre>
<p>Habe ich das richtig verstanden oder handel ich mir damit Probleme ein?</p>
<p>Vielen Dank,<br />
Paty</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742834</guid><dc:creator><![CDATA[Paty]]></dc:creator><pubDate>Tue, 14 Jul 2009 14:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Tue, 14 Jul 2009 14:41:04 GMT]]></title><description><![CDATA[<p>Dein letztes Beispiel geht sowieso nicht, da an eine Referenz sofort ein Objekt gebunden werden muss; sie kann nicht &quot;in der Luft schweben&quot;.</p>
<p>Ja, mach es mit Referenzen. So hab ich das auch in Erinnerung.<br />
Aber ich frage mich, warum man reine Lesezugriffe synchronisieren muss?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742836</guid><dc:creator><![CDATA[Teller]]></dc:creator><pubDate>Tue, 14 Jul 2009 14:41:04 GMT</pubDate></item><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Tue, 14 Jul 2009 14:43:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int&amp; val;

myClass.getNumber(val);
</code></pre>
<p>Das geht schonmal gar nicht.</p>
<p>Man könnte es auch so machen:</p>
<pre><code class="language-cpp">int getNumber()
{
	lock();
	int r = number;
	unlock();
	return r;
}
</code></pre>
<p>Wie man das am besten macht, würde mich auch mal interessieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742840</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 14 Jul 2009 14:43:35 GMT</pubDate></item><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Tue, 14 Jul 2009 14:54:08 GMT]]></title><description><![CDATA[<p><a href="http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742852</guid><dc:creator><![CDATA[locker]]></dc:creator><pubDate>Tue, 14 Jul 2009 14:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Tue, 14 Jul 2009 15:00:00 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int&amp; val;

myClass.getNumber(val);
</code></pre>
<p>Das geht schonmal gar nicht.</p>
<p>Man könnte es auch so machen:</p>
<pre><code class="language-cpp">int getNumber()
{
	lock();
	int r = number;
	unlock();
	return r;
}
</code></pre>
</blockquote>
<p>Aber r muß volatile sein sosnt wirds wegoptimiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742860</guid><dc:creator><![CDATA[general bacardi]]></dc:creator><pubDate>Tue, 14 Jul 2009 15:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Tue, 14 Jul 2009 20:51:52 GMT]]></title><description><![CDATA[<p>general bacardi schrieb:</p>
<blockquote>
<p>Aber r muß volatile sein sosnt wirds wegoptimiert</p>
</blockquote>
<p>Also zumindest wenn man das WinAPI benutzt (Interlocked Funktionen, Critical Sections...), braucht man kein volatile. Es kümmert sich dann um die &quot;memory barriers&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743086</guid><dc:creator><![CDATA[Check0r]]></dc:creator><pubDate>Tue, 14 Jul 2009 20:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to ThreadSafe - get-Fuktion on Wed, 15 Jul 2009 00:52:34 GMT]]></title><description><![CDATA[<p>general bacardi schrieb:</p>
<blockquote>
<p>Aber r muß volatile sein sosnt wirds wegoptimiert</p>
</blockquote>
<p>Wie &quot;Check0r&quot; schon schrieb: r muss <em>nicht</em> volatile sein.</p>
<p>Und normalerweise macht man sowas mit einer &quot;scoped lock&quot; Klasse, womit sich der Code zu folgendem reduziert:</p>
<pre><code class="language-cpp">int foo()
{
    my_scoped_lock&lt;my_mutex_type&gt; lock(mutex); // hier passiert &quot;mutex.lock()&quot;
    return number;
} // hier passiert &quot;mutex.unlock()&quot;, also NACHDEM der returnwert kopiert wurde. und alles ist gut. wie durch magie :)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1743175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743175</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 15 Jul 2009 00:52:34 GMT</pubDate></item></channel></rss>