<?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[Boost::mutex und std::vector?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche im Moment einen vector (v.a. insert) thread-sicher zu bekommen. Allerdings funktioniert es nicht wirklich. (segfault ist keine sehr schöne Programmausgabe :D)<br />
Hier mal mein Code:</p>
<pre><code class="language-cpp">static mutex mt;

void parallel_function(vector* ret){
    //...
    unsigned int j = ...;
    //...

    mt.lock();
    //füge p an stelle j ein
    ret-&gt;insert(ret-&gt;begin()+j, p); //XXX
    mt.unlock();

    //...
}
</code></pre>
<p>Nicht wundern warum's ein pointer auf einen vector ist - geht (hier) nicht anders.<br />
Der vector ist übrigens zu Beginn leer (sollte bei insert kein Problem darstellen).</p>
<p>Meine Funktion füllt parallel den vector, endet aber immer in einem Segfault. Ich kann mir aber nicht so recht erklären warum. Der iterator wird jedes mal neu berechnet und race-conditions sollten durch lock nicht mehr möglich sein.<br />
Wenn ich die mit XXX markierte Zeile auskommentiere, funktioniert alles problemlos. (bis auf den leeren vector)</p>
<p>Ich wäre dankbar für Hilfestellungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270124/boost-mutex-und-std-vector</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 13:46:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270124.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Jul 2010 19:31:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Tue, 06 Jul 2010 19:32:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche im Moment einen vector (v.a. insert) thread-sicher zu bekommen. Allerdings funktioniert es nicht wirklich. (segfault ist keine sehr schöne Programmausgabe :D)<br />
Hier mal mein Code:</p>
<pre><code class="language-cpp">static mutex mt;

void parallel_function(vector* ret){
    //...
    unsigned int j = ...;
    //...

    mt.lock();
    //füge p an stelle j ein
    ret-&gt;insert(ret-&gt;begin()+j, p); //XXX
    mt.unlock();

    //...
}
</code></pre>
<p>Nicht wundern warum's ein pointer auf einen vector ist - geht (hier) nicht anders.<br />
Der vector ist übrigens zu Beginn leer (sollte bei insert kein Problem darstellen).</p>
<p>Meine Funktion füllt parallel den vector, endet aber immer in einem Segfault. Ich kann mir aber nicht so recht erklären warum. Der iterator wird jedes mal neu berechnet und race-conditions sollten durch lock nicht mehr möglich sein.<br />
Wenn ich die mit XXX markierte Zeile auskommentiere, funktioniert alles problemlos. (bis auf den leeren vector)</p>
<p>Ich wäre dankbar für Hilfestellungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922445</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Tue, 06 Jul 2010 19:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Tue, 06 Jul 2010 20:44:53 GMT]]></title><description><![CDATA[<p>&lt;/Exit&gt; schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ret-&gt;insert(ret-&gt;begin()+j, p);
</code></pre>
</blockquote>
<p>Was ist denn <code>j</code> , wenn <code>ret</code> leer ist? Wenn <code>j &gt; 0</code> , ist der übergebene Iterator ungültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922460</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Tue, 06 Jul 2010 20:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Tue, 06 Jul 2010 20:47:35 GMT]]></title><description><![CDATA[<p>EDIT: ui... Allerdings... j... Das wird wohl das Problem sein -&gt; Zeit fürs Bett ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922461</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 06 Jul 2010 20:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Wed, 07 Jul 2010 06:13:06 GMT]]></title><description><![CDATA[<p>Oh ja, das stimmt... Hm hm, das wird doch noch komplizierter als gedacht.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922520</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Wed, 07 Jul 2010 06:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Wed, 07 Jul 2010 07:53:11 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Kleine Anregung dazu, weiß nur nicht wieviel es dir hilft da doch etwas viel vom Code fehlt.</p>
<p>Aber zum einen könntest du du push_back benutzten wenns ans Ende hin muss, was du aber bestimmt selber gefunden hast.</p>
<p>Oder wenn du einen direkten Zugriff auf Indizes benötigst dann mit Reserve und operator[]</p>
<p>Mfg marco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922544</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Wed, 07 Jul 2010 07:53:11 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Wed, 07 Jul 2010 08:05:56 GMT]]></title><description><![CDATA[<p>Nicht <code>reserve</code> sondern <code>resize</code> . <code>reserve</code> reserviert nur den Platz und legt die Elemente nicht an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922546</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 07 Jul 2010 08:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Wed, 07 Jul 2010 09:15:58 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Nicht <code>reserve</code> sondern <code>resize</code> . <code>reserve</code> reserviert nur den Platz und legt die Elemente nicht an.</p>
</blockquote>
<p>Stimmt danke fürs Berichtigen <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>Mfg marco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922584</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Wed, 07 Jul 2010 09:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::mutex und std::vector? on Wed, 07 Jul 2010 13:49:15 GMT]]></title><description><![CDATA[<p>Danke für den Tipp...</p>
<p>Hab ich mir auch schon überlegt, aber da ich nicht weiß, wie groß das Ding wird, kommt nur noch push_back in Frage und da die Threads jeweils nur ihren Teil des (zu Grunde liegenden) Arrays füllen sollen, geht push_back auch nicht.</p>
<p>Bin jetzt umgestiegen auf eine LinkedList mit #threads leeren Elementen zu Beginn.<br />
=&gt; jeder Thread bekommt seinen eigenen Iterator und kann dann per insert seine Werte einfügen. (Reihenfolge muss nämlich konstant bleiben)</p>
<p>Trotzdem dankeschön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922748</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Wed, 07 Jul 2010 13:49:15 GMT</pubDate></item></channel></rss>