<?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[std::atomic, std::shared_ptr, und Underflow]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte mich gerade mit Threads beschäftigen und wie Daten zwischen Thread sicher ausgetauscht werden können. Es geht hier um das lernen, also bitte die Fragen nach Sinn und Unsinn unter das Thema &quot;Ja, kann man sicher auch anders lösen&quot; stellen.</p>
<p>Ich möchte einen Zeiger auf ein Element von allen Threads und allen Klassen aus erreichbar machen. Dazu machen ich den Zeiger atomic. Und da ich gelesen habe, dass Zeiger in std::atomic am Besten in std::shared_ptr liegen, damit ein Thread den Zeiger nicht zerstärt, wärend ein anderer Thread diesen ggf. noch benutzt, versuche ich mich genau daran:</p>
<pre><code class="language-cpp">// Interface.h
class MyInterface abstract
{
public:
  virtual ~MyInterface() {};
  virtual void Run() = 0;
};

// Global.h
#include &lt;atomic&gt;
#include &lt;memory&gt;
#include &lt;Interface.h&gt;

extern std::atomic&lt; std::shared_ptr&lt; MyInterface &gt; &gt; iInterface;

// -----------------------
// Eins.h
#include &lt;Interface.h&gt;
#include &lt;Global.h&gt;

std::atomic&lt; std::shared_ptr&lt; MyInterface &gt; &gt; iInterface( nullptr );

class Eins : virtual public MyInterface
{
public:
  virtual ~Eins() {};
  void Run();
};

// Eins.cpp
#include &lt;Eins.h&gt;
#include &lt;Zwei.h&gt;

void Eins::Run() {};

int main(void)
{
  iInterface = std::shared_ptr&lt; MyInterface &gt;(new Eins());
  Zwei* MyDoIt(new Zwei());
  MyDoIt-&gt;DoIt(); // Das kommt später in einen Thread
  delete MyDoIt;
  MyDoIt = nullptr;
  return 0;
};

// -----------------------
// Zwei.h
#include &lt;Interface.h&gt;
#include &lt;Global.h&gt;

class Zwei
{
public:
  void DoIt();
};

// Zwei.cpp
#include &lt;Zwei.h&gt;
Zwei::DoIt()
{
  iInterface.load()-&gt;Run();
};
</code></pre>
<p>Wenn ich mal das ganze Atomic-Zeug raus mache, dann klappt das auch. Aber sobald ich std::atomic drinnen habe, erhalte ich nach Beendigung des Programmes die Fehlermeldung, dass auf bereits freigegebene Speicherbereiche erneut zugegriffen wird.</p>
<p>Deswegen habe ich den Debugger angeschmissen (VS 2013) und geschaut.<br />
Wenn ich bei der Zeile &quot;return 0;&quot; in main() bin, dann hat mein shard_ptr einen &quot;used&quot; von 4294967295, also 1 unter NULL (underflow). Ich gehe davon aus, das dann versucht wird, den Pointer zu deleten und deswegen der Speicherzugriffs-Fehler entsteht.</p>
<p>Damit habe ich die Auswirkung. Was ich noch nicht habe, ist die Ursache. Wie und wo passiert es denn, dass der shared_ptr eine Benutzungsanzahl von kleiner 0 erhält?<br />
Ich hab jetzt wirklich schon viel probiert und gedebugged, aber komme der Lösung nicht näher. Ich hab auch schon einiges gegoogelt, aber auch die Beiträge geben mir die Lösung nicht wirklich, wobei ich einige Beiträge gefunden habe, bei denen das gleiche Problem auftritt.</p>
<p>Man soll ja klare Fragen stellen:<br />
Wie verwaltet man am Besten globale Zeiger, die in jedem Thread verfügbar sein sollen?</p>
<p>Danke,<br />
Stefan</p>
<p><em>PS: Einige Fehler im Code ausgebessert.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322992/std-atomic-std-shared_ptr-und-underflow</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 13:41:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322992.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Jan 2014 07:39:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 11:58:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte mich gerade mit Threads beschäftigen und wie Daten zwischen Thread sicher ausgetauscht werden können. Es geht hier um das lernen, also bitte die Fragen nach Sinn und Unsinn unter das Thema &quot;Ja, kann man sicher auch anders lösen&quot; stellen.</p>
<p>Ich möchte einen Zeiger auf ein Element von allen Threads und allen Klassen aus erreichbar machen. Dazu machen ich den Zeiger atomic. Und da ich gelesen habe, dass Zeiger in std::atomic am Besten in std::shared_ptr liegen, damit ein Thread den Zeiger nicht zerstärt, wärend ein anderer Thread diesen ggf. noch benutzt, versuche ich mich genau daran:</p>
<pre><code class="language-cpp">// Interface.h
class MyInterface abstract
{
public:
  virtual ~MyInterface() {};
  virtual void Run() = 0;
};

// Global.h
#include &lt;atomic&gt;
#include &lt;memory&gt;
#include &lt;Interface.h&gt;

extern std::atomic&lt; std::shared_ptr&lt; MyInterface &gt; &gt; iInterface;

// -----------------------
// Eins.h
#include &lt;Interface.h&gt;
#include &lt;Global.h&gt;

std::atomic&lt; std::shared_ptr&lt; MyInterface &gt; &gt; iInterface( nullptr );

class Eins : virtual public MyInterface
{
public:
  virtual ~Eins() {};
  void Run();
};

// Eins.cpp
#include &lt;Eins.h&gt;
#include &lt;Zwei.h&gt;

void Eins::Run() {};

int main(void)
{
  iInterface = std::shared_ptr&lt; MyInterface &gt;(new Eins());
  Zwei* MyDoIt(new Zwei());
  MyDoIt-&gt;DoIt(); // Das kommt später in einen Thread
  delete MyDoIt;
  MyDoIt = nullptr;
  return 0;
};

// -----------------------
// Zwei.h
#include &lt;Interface.h&gt;
#include &lt;Global.h&gt;

class Zwei
{
public:
  void DoIt();
};

// Zwei.cpp
#include &lt;Zwei.h&gt;
Zwei::DoIt()
{
  iInterface.load()-&gt;Run();
};
</code></pre>
<p>Wenn ich mal das ganze Atomic-Zeug raus mache, dann klappt das auch. Aber sobald ich std::atomic drinnen habe, erhalte ich nach Beendigung des Programmes die Fehlermeldung, dass auf bereits freigegebene Speicherbereiche erneut zugegriffen wird.</p>
<p>Deswegen habe ich den Debugger angeschmissen (VS 2013) und geschaut.<br />
Wenn ich bei der Zeile &quot;return 0;&quot; in main() bin, dann hat mein shard_ptr einen &quot;used&quot; von 4294967295, also 1 unter NULL (underflow). Ich gehe davon aus, das dann versucht wird, den Pointer zu deleten und deswegen der Speicherzugriffs-Fehler entsteht.</p>
<p>Damit habe ich die Auswirkung. Was ich noch nicht habe, ist die Ursache. Wie und wo passiert es denn, dass der shared_ptr eine Benutzungsanzahl von kleiner 0 erhält?<br />
Ich hab jetzt wirklich schon viel probiert und gedebugged, aber komme der Lösung nicht näher. Ich hab auch schon einiges gegoogelt, aber auch die Beiträge geben mir die Lösung nicht wirklich, wobei ich einige Beiträge gefunden habe, bei denen das gleiche Problem auftritt.</p>
<p>Man soll ja klare Fragen stellen:<br />
Wie verwaltet man am Besten globale Zeiger, die in jedem Thread verfügbar sein sollen?</p>
<p>Danke,<br />
Stefan</p>
<p><em>PS: Einige Fehler im Code ausgebessert.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377353</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Wed, 15 Jan 2014 11:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 08:18:02 GMT]]></title><description><![CDATA[<p>Globale Variablen werden nicht besser, bloß weil man mit Threads arbeitet. Ein shared_ptr als globale Variable dürfte wohl völlig sinnlos sein, der ist doch gerade zum Teilen da!</p>
<p>Da du die vermutlich entscheidenden Dinge nicht gepostet hast, kann man zum Fehler hier nicht viel sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377354</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 15 Jan 2014 08:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 08:58:03 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Da du die vermutlich entscheidenden Dinge nicht gepostet hast, kann man zum Fehler hier nicht viel sagen.</p>
</blockquote>
<p>Ich hab alles gepostet, wie es in meinem Test drinnen steht. Oder du sagst mir, was ich noch nicht gepostet habe, dann würde ich es ergänzen.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Globale Variablen werden nicht besser, bloß weil man mit Threads arbeitet. Ein shared_ptr als globale Variable dürfte wohl völlig sinnlos sein, der ist doch gerade zum Teilen da!</p>
</blockquote>
<p>Ist ja auch ein LERNPROJEKT um mal mit atomic zu arbeiten und um die Threads- und Atomic-Denke im LIVE-Betrieb zu sehen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377359</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Wed, 15 Jan 2014 08:58:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 09:01:15 GMT]]></title><description><![CDATA[<p>Am besten ist es wenn man das Objekt noch vor dem Beginn der Threads erzeugt und erst nach Ende dieser gelöscht wird.</p>
<p>Ich führe bei mir häufig eine recht starre Ordnung aus Hauptthread und Worker-Thread-pool ein, wobei der Haupthtread alle nicht-threadsafe-zugriffe erledigt und die Workerthreads die reinen Berechnungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377360</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Wed, 15 Jan 2014 09:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 10:12:54 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Da du die vermutlich entscheidenden Dinge nicht gepostet hast, kann man zum Fehler hier nicht viel sagen.</p>
</blockquote>
<p>Ich hab alles gepostet, wie es in meinem Test drinnen steht. Oder du sagst mir, was ich noch nicht gepostet habe, dann würde ich es ergänzen.</p>
</blockquote>
<p>Der Code ist nicht übersetzbar. iInterface liegt im namespace ForAtomic, der wird aber bei der Verwendung nicht angegeben.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Globale Variablen werden nicht besser, bloß weil man mit Threads arbeitet. Ein shared_ptr als globale Variable dürfte wohl völlig sinnlos sein, der ist doch gerade zum Teilen da!</p>
</blockquote>
<p>Ist ja auch ein LERNPROJEKT um mal mit atomic zu arbeiten und um die Threads- und Atomic-Denke im LIVE-Betrieb zu sehen!</p>
</blockquote>
<p>Dann solltest du jetzt gelernt haben, das globale Variablen auch als atomic unbrauchbar und shared_ptr eben keine globalen Variablen sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377386</guid><dc:creator><![CDATA[lars.tetzlaff]]></dc:creator><pubDate>Wed, 15 Jan 2014 10:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 10:43:50 GMT]]></title><description><![CDATA[<p>lars.tetzlaff schrieb:</p>
<blockquote>
<p>stefanjann schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Globale Variablen werden nicht besser, bloß weil man mit Threads arbeitet. Ein shared_ptr als globale Variable dürfte wohl völlig sinnlos sein, der ist doch gerade zum Teilen da!</p>
</blockquote>
<p>Ist ja auch ein LERNPROJEKT um mal mit atomic zu arbeiten und um die Threads- und Atomic-Denke im LIVE-Betrieb zu sehen!</p>
</blockquote>
<p>Dann solltest du jetzt gelernt haben, das globale Variablen auch als atomic unbrauchbar und shared_ptr eben keine globalen Variablen sind.</p>
</blockquote>
<p>Gut, jetzt weiß ich, wie es nicht geht. Hat noch jemand einen Wink in die richtige Richtung?</p>
<p><strong>Mein Konzept:</strong><br />
Eine Klasse, die Atomic verschiedene Stati überwacht. (Bei mir Class Eins)<br />
Viele Klassen, die in Threads laufen und Ihren Status übergeben. (Bei mir Class Zwei)</p>
<p><strong>Die klare Frage:</strong><br />
Wo lege ich die Status-Klasse, wenn nicht in einem globalen namespace? Wie können die Threads darauf zugreifen?</p>
<p><strong>Ausrede:</strong><br />
Die Idee mit der globalen Variablen im namespace kommt nicht von mir, die hab ich aus einem Tutorial. Ich nehme mal an, das Tut ist Mist?</p>
<p><strong>PS:</strong><br />
Wäre denn mein Code richtig, wenn der atomic nicht global liegen würde? (Abgesehen, dass ich den namespace vor dem Interface jetzt versehentlich beim Copy &amp; Paste vergessen habe....)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377401</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Wed, 15 Jan 2014 10:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 11:26:28 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p><strong>Mein Konzept:</strong><br />
Eine Klasse, die Atomic verschiedene Stati überwacht. (Bei mir Class Eins)<br />
Viele Klassen, die in Threads laufen und Ihren Status übergeben. (Bei mir Class Zwei)</p>
<p><strong>Die klare Frage:</strong><br />
Wo lege ich die Status-Klasse, wenn nicht in einem globalen namespace? Wie können die Threads darauf zugreifen?</p>
</blockquote>
<p>Wenn du einen Status überwachen willst, hätte ich so etwas wie std::atomic&lt;int&gt; erwartet. Wo da ein Zusammenhang zu einem Interface mir einer Run-Methode ist, verstehe ich nicht.</p>
<p>Grunsätzlich ist der Sinn von atomic, dass zwei oder mehr Threads Änderungen auch &quot;sehen&quot;, wenn sie in einem anderen Thread durchgeführt wurden. shared_ptr sorgen selber dafür, ein atomic ist dort nicht notwendig. Das betrifft aber natürlich nur den verwalteten Speicher (sprich den Pointer).</p>
<p>stefanjann schrieb:</p>
<blockquote>
<p><strong>PS:</strong><br />
Wäre denn mein Code richtig, wenn der atomic nicht global liegen würde? (Abgesehen, dass ich den namespace vor dem Interface jetzt versehentlich beim Copy &amp; Paste vergessen habe....)</p>
</blockquote>
<p>Dein Code lässt sich nicht übersetzen.<br />
Fehler neben dem fehlenden Namespace:<br />
- alle Methoden private<br />
- delete auf Klassenname<br />
Dann habe ich aufgehört.</p>
<p>Warum ist das Interface virtuell abgeleitet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377408</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 15 Jan 2014 11:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 11:54:50 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>stefanjann schrieb:</p>
<blockquote>
<p><strong>Mein Konzept:</strong><br />
Eine Klasse, die Atomic verschiedene Stati überwacht. (Bei mir Class Eins)<br />
Viele Klassen, die in Threads laufen und Ihren Status übergeben. (Bei mir Class Zwei)</p>
<p><strong>Die klare Frage:</strong><br />
Wo lege ich die Status-Klasse, wenn nicht in einem globalen namespace? Wie können die Threads darauf zugreifen?</p>
</blockquote>
<p>Wenn du einen Status überwachen willst, hätte ich so etwas wie std::atomic&lt;int&gt; erwartet. Wo da ein Zusammenhang zu einem Interface mir einer Run-Methode ist, verstehe ich nicht.</p>
<p>Grunsätzlich ist der Sinn von atomic, dass zwei oder mehr Threads Änderungen auch &quot;sehen&quot;, wenn sie in einem anderen Thread durchgeführt wurden. shared_ptr sorgen selber dafür, ein atomic ist dort nicht notwendig. Das betrifft aber natürlich nur den verwalteten Speicher (sprich den Pointer).</p>
</blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Warum ist das Interface virtuell abgeleitet?</p>
</blockquote>
<p><strong>Stell dir folgendes vor:</strong><br />
Das Interface ist iLandkarte.<br />
Abgeleitet davon werden cBayern, cHessen, etc...</p>
<p>Es gibt Klassen cAuto, cMotorrad, cAmpel, etc...</p>
<p>Aus iLandkarte kann ich mir die Koordinaten der Strassen abholen, auch die Verkehrsschilder um an einer Kreuzung die Vorfahrt zu regeln.<br />
Mehrere Thread cAmpel laufen um an einigen Kreuzungen die Ampeln zu steuern und zu sagen, wer gerade Vorfahrt hat.</p>
<p>Es laufen mehrere Thread cAuto oder cMotorrad. (Geerbt von iFahrzeug).<br />
Beim Start melden die sich bei iLandkarte an (registrieren sich) und übermitteln ihren aktuellen Status (z.B. Koordinaten, wo sich das Fahrzeug gerade befindet).<br />
Alle iFahrzeug-Elemente sind beweglich müssen also die anderen Fahrzeuge abfragen (damit diese nicht zusammen krachen) und die Vorfahrtsregelungen aus den Verkehrsschildern und den Ampeln abfragen.</p>
<p>Dann bekommt jeder Fahrzeug-Thread einen Auftrag. Fahre von deiner aktuellen Position nach Position X,Y über die Strassen.</p>
<p>Dann starte ich noch eine Thread, der mir die Bildschirmausgabe macht (OpenGl oder DirectX, etc).</p>
<p><strong>Jetzt die Fragen:</strong><br />
Wieso das Interface virtuell abgeleitet ist? Die Karte setzt sich später mal aus verschiedenen vererbten Klassen zusammen. Da ich dann eine Diamant-Vererbung erhalten werde, ist mein Interface virtuell. Das Interface selbst beinhaltet keine Funktionen, sondern nur &quot;virtual = 0&quot; und wird somit nur einmal benötigt.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Dein Code lässt sich nicht übersetzen.</p>
</blockquote>
<p>Ja, sorry. Mit Copy und Paste zusammen geschustert und aus Faulheit nicht auf lauffähig geprüft. Gelobe Besserung beim nächsten Beispiel.</p>
<p><strong>Lösungsansatz von mir</strong><br />
Ich habe irgendwo eine Variable mit extern definiert. Diese ist iLandkarte. Sobald alles wichtige verarbeitet ist (Icons laden, etc) wird irgendwoher die Entscheidung errechnet, welche Landkarte (cBayern, cHessen) geladen wird.<br />
Ich starte alle Thread, die mir die Landkarte auferlegt (cAmpel, etc)<br />
Ich starte ein Fahrzeug nach dem anderen in einem Thread und gebe gleich ein Ziel an.<br />
In jedem Thread muss ich irgendwie auf die Landkarte zugreifen und auch alle Änderungen sofort mitbekommen, weil sich ja alle Fahrzeuge bewegen (außer die stehen an der Ampel) und auch die Ampeln nur zu bestimmten Zeiten auf Grün sind. Das mache ich über die (bei mir noch) globale Variable.<br />
Die Bildschirmausgabe fragt alle die Landkarte ab, die Ampeln und alle Fahrzeuge und zeichnet dann was schönes.</p>
<p><strong>Und jetzt?</strong><br />
...hoffe ich, jemand sagt mir, wie man das richtig plant und gibt mir vielleicht ein Schema, wie meine Klassen angelegt werden müssten.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377410</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Wed, 15 Jan 2014 11:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 16:28:13 GMT]]></title><description><![CDATA[<p>Du hast da glaube ich ein kleines Missverständnis was die Funktionsweise von std::atomic&lt;&gt; angeht. Du kannst das nicht einfach mit einem beliebigen Typen instantiieren und hoffen, dass das Resultat dann das tut was du erwartest.</p>
<p>std::atomic&lt;&gt; macht erstmal nur Sinn für eine Handvoll Typen für die es spezialisiert ist (die vollständige Liste findest du z.b. <a href="http://en.cppreference.com/w/cpp/atomic/atomic" rel="nofollow">hier</a>). Es gibt dann noch eine Handvoll Sonderregeln für POD-Typen, aber das trifft alles nicht auf deinen shared_ptr zu.</p>
<p>Was du brauchst sind die <a href="http://en.cppreference.com/w/cpp/memory/shared_ptr/atomic" rel="nofollow">freien atomic Funktionen</a> für shared_ptr. Wie bei allem was in C++ atomic im Namen hat sind die aber nicht ganz einfach zu verwenden.</p>
<p>Beachte dass im shared_ptr der Reference Count schon von Haus aus thread-safe ist. Solange du also wirklich nur die Referenz auf ein Objekt zwischen verschiedenen Threads teilen willst (also verschiedene shared_ptr Objekte die auf das selbe Objekt zeigen und sich einen Refcount teilen) klappt das von Haus aus ohne große Luftsprünge. Erst wenn du ein einzelnes shared_ptr Objekt zwischen Threads teilen willst wirds knifflig. Dieser Anwendungsfall taucht aber im wirklichen Leben zum Glück nur höchst selten auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377460</guid><dc:creator><![CDATA[Desdemona]]></dc:creator><pubDate>Wed, 15 Jan 2014 16:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::atomic, std::shared_ptr, und Underflow on Wed, 15 Jan 2014 18:11:00 GMT]]></title><description><![CDATA[<p>Desdemona schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Danke,<br />
dann werde ich mich da nochmal etwas durcharbeiten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377470</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Wed, 15 Jan 2014 18:11:00 GMT</pubDate></item></channel></rss>