<?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[Mutex + konstante Funktion]]></title><description><![CDATA[<p>Ich hab folgende funktion:</p>
<pre><code>size_t getSize() const{
   return m_locked_list.size();
}
</code></pre>
<p>Weil der zugriff auf m_locked_list threadsafe sein soll, muss ich<br />
den zugriff auf m_locked_list blockieren bevor ich die .size() funkition aufrufe.<br />
Dazu wollte ich die lokale CLock-klasse verwenden:<br />
(der konstruktor blockiert und der destruktor gibt den zugriff wieder frei)</p>
<p>size_t getSize() const{<br />
CLock lock(this);<br />
return m_locked_list.size();<br />
}</p>
<p>und hier mein kleines problem.<br />
getSize ist eine konstante funktion, kann also keine member variable ändern und somit die mutex nicht blockieren.</p>
<p>Gibt es irgenteine möglichkeit m_locked_list durch eine mutex zu blockieren und trotzdem die funktion konstant zu lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313830/mutex-konstante-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 20:57:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313830.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Feb 2013 16:03:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 16:03:30 GMT]]></title><description><![CDATA[<p>Ich hab folgende funktion:</p>
<pre><code>size_t getSize() const{
   return m_locked_list.size();
}
</code></pre>
<p>Weil der zugriff auf m_locked_list threadsafe sein soll, muss ich<br />
den zugriff auf m_locked_list blockieren bevor ich die .size() funkition aufrufe.<br />
Dazu wollte ich die lokale CLock-klasse verwenden:<br />
(der konstruktor blockiert und der destruktor gibt den zugriff wieder frei)</p>
<p>size_t getSize() const{<br />
CLock lock(this);<br />
return m_locked_list.size();<br />
}</p>
<p>und hier mein kleines problem.<br />
getSize ist eine konstante funktion, kann also keine member variable ändern und somit die mutex nicht blockieren.</p>
<p>Gibt es irgenteine möglichkeit m_locked_list durch eine mutex zu blockieren und trotzdem die funktion konstant zu lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2297942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297942</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Mon, 11 Feb 2013 16:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 16:09:49 GMT]]></title><description><![CDATA[<p>-&gt;<a href="http://en.cppreference.com/w/cpp/language/cv" rel="nofollow">mutable</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2297944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297944</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 11 Feb 2013 16:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 17:28:26 GMT]]></title><description><![CDATA[<p>Übrigens bin ich mir nicht sicher, ob der Mutex so überhaupt korrekt greift. Ich würde den Rückgabewert in einer Variable zwischenspeichern:</p>
<pre><code>lock();

const std::size_t size = m_locked_list.size();

unlock();

return size;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2297967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297967</guid><dc:creator><![CDATA[klöklöklö]]></dc:creator><pubDate>Mon, 11 Feb 2013 17:28:26 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 17:47:17 GMT]]></title><description><![CDATA[<p>War schon korrekt so...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2297974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297974</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 11 Feb 2013 17:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 17:49:34 GMT]]></title><description><![CDATA[<pre><code>lock();//passiert im Konstruktor von CLock

const std::size_t size = m_locked_list.size();

unlock();//passiert im Destruktor!!! Prima Sache, klappt auch bei Exceptions und Gedöns

return size;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2297975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297975</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 11 Feb 2013 17:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 18:19:09 GMT]]></title><description><![CDATA[<p>klöklöklö schrieb:</p>
<blockquote>
<p>Übrigens bin ich mir nicht sicher, ob der Mutex so überhaupt korrekt greift. Ich würde den Rückgabewert in einer Variable zwischenspeichern:</p>
<pre><code>lock();

const std::size_t size = m_locked_list.size();

unlock();

return size;
</code></pre>
</blockquote>
<p>Das Kopieren des Returnwert erfolgt bevor der Scope der Funktion verlassen wird.<br />
Also auch bevor der Destruktor der &quot;Scoped-Lock&quot; Klasse läuft.<br />
Also alles OK.</p>
<p>Eselsbrücke: man kann ja auch lokale Variablen zurückgeben. Die können natürlich nur kopiert werden so lange sie noch nicht zerstört wurden. Also *muss* das Kopieren des Returnwert erfolgen bevor der Scope der Funktion verlassen wird, sonst wären die lokalen Variablen ja schon weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2297980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297980</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Feb 2013 18:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Mon, 11 Feb 2013 20:09:19 GMT]]></title><description><![CDATA[<p>Okay, ich glaube mutable ist das was ich gesucht habe..<br />
wenn es nicht funktioniert melde ich mich nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2297994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2297994</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Mon, 11 Feb 2013 20:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Tue, 12 Feb 2013 12:40:37 GMT]]></title><description><![CDATA[<p>Ihhh, was ist denn CLock. std::lock_guard verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298201</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 12 Feb 2013 12:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex + konstante Funktion on Tue, 12 Feb 2013 12:51:53 GMT]]></title><description><![CDATA[<p><a href="http://channel9.msdn.com/posts/C-and-Beyond-2012-Herb-Sutter-You-dont-know-blank-and-blank" rel="nofollow">http://channel9.msdn.com/posts/C-and-Beyond-2012-Herb-Sutter-You-dont-know-blank-and-blank</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298206</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 12 Feb 2013 12:51:53 GMT</pubDate></item></channel></rss>