<?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[[SOLVED] Zugriff auf Container mit mehreren Threads]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>bisher habe ich den Zugriff auf einen vector mit mehreren Threads etwa<br />
so verwaltet:</p>
<pre><code class="language-cpp">#include&lt;vector&gt;
#include&lt;boost/thread/mutex.hpp&gt;

class Foo{};

std::vector&lt;Foo*&gt; vec;
boost::mutex mutex;

void doSomething() {
        //...
        {
                boost::mutex::scoped_lock l(mutex);
                vec.push_back(new Foo);
        }

}
</code></pre>
<p>Obwohl mir mit dieser Vorgehensweise bisher keinerlei Probleme aufgefallen sind,<br />
ist es streng genommen wegen möglichem Cachen von Daten und Änderung<br />
der Befehlsreihenfolge nicht sicher.</p>
<p>Wie kann ich dieses Fragment ändern, damit es wirklich sicher ist?<br />
Verwendet ihr in so einem Fall einen boost-Container (z.B. aus Interprocess)?</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280075/solved-zugriff-auf-container-mit-mehreren-threads</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 06:03:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280075.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Jan 2011 09:09:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 11:47:59 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>bisher habe ich den Zugriff auf einen vector mit mehreren Threads etwa<br />
so verwaltet:</p>
<pre><code class="language-cpp">#include&lt;vector&gt;
#include&lt;boost/thread/mutex.hpp&gt;

class Foo{};

std::vector&lt;Foo*&gt; vec;
boost::mutex mutex;

void doSomething() {
        //...
        {
                boost::mutex::scoped_lock l(mutex);
                vec.push_back(new Foo);
        }

}
</code></pre>
<p>Obwohl mir mit dieser Vorgehensweise bisher keinerlei Probleme aufgefallen sind,<br />
ist es streng genommen wegen möglichem Cachen von Daten und Änderung<br />
der Befehlsreihenfolge nicht sicher.</p>
<p>Wie kann ich dieses Fragment ändern, damit es wirklich sicher ist?<br />
Verwendet ihr in so einem Fall einen boost-Container (z.B. aus Interprocess)?</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004376</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 09 Jan 2011 11:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 10:01:30 GMT]]></title><description><![CDATA[<p>Welche Änderung der Befehlsreihenfolge?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004380</guid><dc:creator><![CDATA[h???]]></dc:creator><pubDate>Sun, 09 Jan 2011 10:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 10:54:29 GMT]]></title><description><![CDATA[<p>h??? schrieb:</p>
<blockquote>
<p>Welche Änderung der Befehlsreihenfolge?</p>
</blockquote>
<p>Wenn ich nochmal drüber nachdenke, wird dies wohl nicht passieren,<br />
da das unlock des Mutexes (wahrscheinlich) volatile ist.</p>
<p>Um meine generellen Bedenken nur noch einmal theoretisch zu erläutern:</p>
<p>Intern können einzelne Befehle vertauscht werden, so dass bei einer<br />
Ausführung in einem einzelnen Thread kein Unterschied erkennbar ist.</p>
<p>Als theoretisches Beispiel:<br />
Der Vektor ist voll und deswegen muss der interne Speicher neu alloziiert<br />
werden und der Verweis auf diesen Bereich aktualisiert werden.</p>
<p>Jetzt kann das unlocken des Mutex vor die letzte Zuweisung verschoben<br />
werden, falls im singlethreaded Fall kein Unterschied zu merken ist.</p>
<p>Somit könnte der Zeiger noch ins Nirvana zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004390</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 09 Jan 2011 10:54:29 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 11:16:04 GMT]]></title><description><![CDATA[<p>Ein Mutex stellt sicher, dass die von dir geschilderten Dinge nicht eintreten. Daran dürfte auch eine RAII-konforme Kapselung nichts ändern.</p>
<p>volatile hat nichts mit Threads zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004393</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 09 Jan 2011 11:16:04 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 11:28:46 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Ein Mutex stellt sicher, dass die von dir geschilderten Dinge nicht eintreten.</p>
</blockquote>
<p>Ein Mutex garantiert mir auch , dass alle gecachten Werte neu aus dem Arbeitsspeicher<br />
neu ausgelesen werden?</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>volatile hat nichts mit Threads zu tun.</p>
</blockquote>
<p>Dessen bin ich mir bewusst.</p>
<p>Cool...<br />
Und ich dachte, ich hab immer nur &quot;halb&quot;-sicher geproggt ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004396</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 09 Jan 2011 11:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 11:39:47 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Ein Mutex stellt sicher, dass die von dir geschilderten Dinge nicht eintreten.</p>
</blockquote>
<p>Ein Mutex garantiert mir auch , dass alle gecachten Werte neu aus dem Arbeitsspeicher<br />
neu ausgelesen werden?</p>
</blockquote>
<p>Alle Variablenwerte, die du in einem Thread direkt nach einem Mutexunlock sehen kannst, sind in einem anderen Thread nach einem Lock des gleichen Mutex sichtbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004400</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 09 Jan 2011 11:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Sun, 09 Jan 2011 11:47:33 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Alle Variablenwerte, die du in einem Thread direkt nach einem Mutexunlock sehen kannst, sind in einem anderen Thread nach einem Lock des gleichen Mutex sichtbar.</p>
</blockquote>
<p>Danke manni66!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004405</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 09 Jan 2011 11:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] Zugriff auf Container mit mehreren Threads on Mon, 10 Jan 2011 11:18:56 GMT]]></title><description><![CDATA[<p>Reicht die Verwendung eines Mutexes wirklich aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004862</guid><dc:creator><![CDATA[Skeptiker]]></dc:creator><pubDate>Mon, 10 Jan 2011 11:18:56 GMT</pubDate></item></channel></rss>