<?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 Pointer-zugriff]]></title><description><![CDATA[<p>Also, ich hab ein kleines problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich habe eine klasse, die eine map beinhaltet, in welcher ich einige objecte gespeichert habe.<br />
um dem benutzer zugriff auf diese objecte zu geben habe ich folgende funktion geschrieben:</p>
<pre><code>// get pointer to an object
// -&gt; param id: identifier of the object
// -&gt; return: pointer to the object
TClass* get(const TId&amp; p_id){
    CLock lock(this);  // lock this class using a mutex

    // search for the right element and erase it if it exists
    for(auto it = m_objects.begin(); it != m_objects.end(); ++it){ 
        if(it-&gt;first == p_id) return it-&gt;second;
    }
    return nullptr; // object not found
}
</code></pre>
<p>das problem ist nun, wenn das objekt von einem anderen thread gelöscht wird ist der pointer &quot;kaputt&quot; und es könnte zu fehlern kommen.<br />
Außerdem ist der zugriff auf mein objekt nicht threadsafe, weil alle threads über den pointer wie sie wollen das objekt manipulieren können und auch das ist eine potentielle fehlerquelle.<br />
Meine frage ist nun, wie kann ich den zugriff auf die objekte in der std::map anders gestallten, sodass das ganze threadsafe bleibt und ich nicht mit pointern rumhantieren muss.</p>
<p>PS: hoffe das war irgentwie halbwegs verständlich, ich hatte keine ahnung, wie ich das erklären soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313275/threadsafe-pointer-zugriff</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 04:52:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313275.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Jan 2013 22:39:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Fri, 25 Jan 2013 22:39:22 GMT]]></title><description><![CDATA[<p>Also, ich hab ein kleines problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich habe eine klasse, die eine map beinhaltet, in welcher ich einige objecte gespeichert habe.<br />
um dem benutzer zugriff auf diese objecte zu geben habe ich folgende funktion geschrieben:</p>
<pre><code>// get pointer to an object
// -&gt; param id: identifier of the object
// -&gt; return: pointer to the object
TClass* get(const TId&amp; p_id){
    CLock lock(this);  // lock this class using a mutex

    // search for the right element and erase it if it exists
    for(auto it = m_objects.begin(); it != m_objects.end(); ++it){ 
        if(it-&gt;first == p_id) return it-&gt;second;
    }
    return nullptr; // object not found
}
</code></pre>
<p>das problem ist nun, wenn das objekt von einem anderen thread gelöscht wird ist der pointer &quot;kaputt&quot; und es könnte zu fehlern kommen.<br />
Außerdem ist der zugriff auf mein objekt nicht threadsafe, weil alle threads über den pointer wie sie wollen das objekt manipulieren können und auch das ist eine potentielle fehlerquelle.<br />
Meine frage ist nun, wie kann ich den zugriff auf die objekte in der std::map anders gestallten, sodass das ganze threadsafe bleibt und ich nicht mit pointern rumhantieren muss.</p>
<p>PS: hoffe das war irgentwie halbwegs verständlich, ich hatte keine ahnung, wie ich das erklären soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293535</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Fri, 25 Jan 2013 22:39:22 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Fri, 25 Jan 2013 23:32:49 GMT]]></title><description><![CDATA[<p>Klingt komisch, wenn die Objekte von jedem Thread aus fröhlich gelöscht werden könnten, aber doch nicht nur zu deren Working-Set gehören, sondern potentiell für alle Threads interessant sind...<br />
Aber wenn es nunmal alles so undurchsichtig sein soll, kannst du die Lebenszeit ja an einen shared_ptr binden und somit künstlich aufblähen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293547</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 25 Jan 2013 23:32:49 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 00:14:36 GMT]]></title><description><![CDATA[<p>Ja, <code>shared_ptr</code> eignen sich gut für sowas.</p>
<p>Sie lösen aber nicht das zweite Problem dass du hast, nämlich dass die Objekte selbst thread-safe sein müssen.<br />
D.h. du musst deine Objekte thread-safe machen, oder die Zugriffe irgendwie von Aussen synchronisieren. Was sich aber schwierig gestalten wird, wenn die Threads einfach so jeder für sich hin machen ohne zu wissen was die anderen tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293551</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 26 Jan 2013 00:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 06:50:43 GMT]]></title><description><![CDATA[<p>also grob gesagt shared_ptr benutzen und objekte threadsafe machen!? wird gemacht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2293561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293561</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Sat, 26 Jan 2013 06:50:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 07:08:12 GMT]]></title><description><![CDATA[<p>ich habe so das Gefühl dass dieses Design implodieren wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293565</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 26 Jan 2013 07:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 07:55:15 GMT]]></title><description><![CDATA[<p>gamer8o4 schrieb:</p>
<blockquote>
<pre><code>for(auto it = m_objects.begin(); it != m_objects.end(); ++it)
</code></pre>
</blockquote>
<p>Ach, so sucht man heute in einer map. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293569</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 26 Jan 2013 07:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 08:20:43 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>gamer8o4 schrieb:</p>
<blockquote>
<pre><code>for(auto it = m_objects.begin(); it != m_objects.end(); ++it)
</code></pre>
</blockquote>
<p>Ach, so sucht man heute in einer map. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Jetzt lies doch mal genau was er macht, steht doch im Kommentar und der lügt nie.</p>
<p>gamer8o4 schrieb:</p>
<blockquote>
<pre><code>// search for the right element and erase it if it exists
    for(auto it = m_objects.begin(); it != m_objects.end(); ++it){ 
        if(it-&gt;first == p_id) return it-&gt;second;
    }
</code></pre>
</blockquote>
<p>Aber was soll man auch machen, wenn die map keine search Methode hat. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293573</guid><dc:creator><![CDATA[AnAstronaut]]></dc:creator><pubDate>Sat, 26 Jan 2013 08:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 08:23:37 GMT]]></title><description><![CDATA[<p>Aber immer hin macht er ja alles &quot;Thread-safe&quot;, damit holt er die Performance mit Multithreading sicher wieder raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293574</guid><dc:creator><![CDATA[AnAstronaut]]></dc:creator><pubDate>Sat, 26 Jan 2013 08:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 22:43:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber immer hin macht er ja alles &quot;Thread-safe&quot;</p>
</blockquote>
<p>ja, die klasse gehört zu der grundlage auf der später ein gleines eigenes direct3d 11 gui system aufsetzen soll und das soll alles schön threadsafe sein (zumindest wird allen klassen durch policies die möglichkeit gegeben threadsafe zu sein) <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>
<blockquote>
<p>Ach, so sucht man heute in einer map.</p>
</blockquote>
<p>nein natürlich nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ich hab auch schon alles mit map::find umgeschrieben...</p>
<blockquote>
<p>ich habe so das Gefühl dass dieses Design implodieren wird.</p>
</blockquote>
<p>oh ja, da habe ich schiss vor <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich bin gerade nen bisschen am überlegen und ausprobieren, wie ich es so hinbekommen kann, dass genau das nicht passiert.<br />
ich muss irgentwie richtlinien schaffen, dass ein thread die hauptaufgaben wie löschen und ein paar weitere sachen übernimmt, die ich jetzt hier nicht erkläre und die anderen threads nur leserechte haben.<br />
Das wird noch lustig, ich muss einiges am design noch überdenken ich weiß <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293778</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Sat, 26 Jan 2013 22:43:00 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sat, 26 Jan 2013 22:55:17 GMT]]></title><description><![CDATA[<p>Was genau versprichst du dir davon, dass mehrere Threads hier gleichzeitig versuchen, Items zu löschen, dabei aber natürlich serialisiert werden müssen!?</p>
<p>Alles threadsafe zu machen, indem man überall Locks drum herumbaut, ist nett. Aber der Sinn von Threads ist nunmal, dass Dinge parallel ausgeführt werden können. Threads die sich ständig gegenseitig blockieren, bringen nichts außer Komplexität und sinnlosen Overhead...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293780</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 26 Jan 2013 22:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Sun, 27 Jan 2013 07:39:33 GMT]]></title><description><![CDATA[<p>okay, es klingt glaube ich erstmal ziemlich sinnlos, wenn man nicht weiß was ich mache, also....</p>
<p>ich habe die oben beschriebene klasse namens CLanguageManager die objekte der klasse CLanguage verwaltet. mit verwalten ist in diesem fall gemeint es wird immer die aktuelle sprache selektiert und alle threads können so auf das aktuell aktive objekt von CLanguage zugreifen. Dardurch bekomme ich multilanguage-support und kann die sprache mit einem simplen pointerwechsel für das gesammte programm ändern.<br />
Außerdem habe ich durch den lösch-und lademechanismus die möglichkeit sprachen also samlungen von strings während der laufzeit des programms aus einem eigenen dateiformat zu lesen und nicht mehr benötigte objekte von CLanguage aus dem zu löschen (über die erase-funktion).<br />
Die get-funktion spielt in diesem durcheinander eine eher kleine rolle, da ihr die aufgabe zukommen würde strings von einer bestimmten sprache auszulesen;<br />
viel wichtiger ist da die &quot;getSelected&quot;-funktion, welche in etwa nach dem gleichen prinzip funktioniert, aber die aktuelle sich möglicherweise ändernde sprache zurückgibt.</p>
<p>Puuhhh... hoffe man kann das verstehen. solange die klasse nicht fertig ist ist es schwer zu erklären was in meinem kopf vorgeht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>edit: das mit den shared_ptr greift also dann, wenn ein thread auf eine sprache zugreift, welche angeblich nicht mehr gebracht wird und vom hauptthread schon gelöscht wurde..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293809</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Sun, 27 Jan 2013 07:39:33 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Mon, 28 Jan 2013 15:59:51 GMT]]></title><description><![CDATA[<p>Für eine einfache Sprachumschaltung zur Laufzeit ist das aber mit &quot;Atombomben auf Spatzen werfen&quot;.</p>
<p>Das Design würde ich nochmal überdenken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294168</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 28 Jan 2013 15:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Mon, 28 Jan 2013 18:38:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9016">@MichelRT</a><br />
Nicht wirklich.<br />
Es ist einfach, sicher und funktioniert.</p>
<p>Wo sind hier die Atombomben?<br />
Und wo die Spatzen? Es gibt durchaus einige Fälle wo man sich mit sowas in den Fuss schiessen kann, wenn man es zu einfach macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294245</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 28 Jan 2013 18:38:56 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsafe Pointer-zugriff on Mon, 28 Jan 2013 21:30:04 GMT]]></title><description><![CDATA[<p>ja, die programme die ich meißtens schreibe sind von der gui relativ überschaubar, aber eben mehrsprachig, also dachte ich mir... warum nicht <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>
<p>außerdem wenn man nur eine sprache läd ist das ganze doch eher ein tepichknaller als eine atombombe. einfaches strings für buttonbeschriftungen, usw. aus einer datei lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294316</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Mon, 28 Jan 2013 21:30:04 GMT</pubDate></item></channel></rss>