<?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[Meyers Singleton Threadsafe in gcc ?]]></title><description><![CDATA[<p>Guten Abend und frohe Ostern,</p>
<p>ich meine mich zu erinnern, hier im Forum gelesen zu haben, gcc würde garantieren, dass das sogenannte &quot;Meyers Singleton&quot; threadsafe ist. Nur finde ich gerade weder hier im Forum den Thread noch eine offizielle Quelle dafür.</p>
<p>Frage: Gilt das für beide Formen des Meyers Singeltons, also für die mit Referenzen genauso wie die mit Pointern?</p>
<p>Ich kenne nämlich zwei implementierungen der getInstance()-Funktion, die sich beide Meyers Singleton nennen:</p>
<pre><code class="language-cpp">static Singleton* getInstance() {
    static Singleton instance;
    return &amp;instance;
}
</code></pre>
<p>und mit Referenzen:</p>
<pre><code class="language-cpp">static Singleton&amp; getInstance() {
    static Singleton instance;
    return instance;
}
</code></pre>
<p>Ich würde letztere bevorzugen und wüsste gerne, ob es eine offizielle Quelle dafür gibt, dass das in gcc threadsafe ist.</p>
<p>Gruß,<br />
Philipp</p>
<p>...und viele dicke bunte Eier!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264237/meyers-singleton-threadsafe-in-gcc</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 03:57:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264237.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Apr 2010 19:46:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 19:46:27 GMT]]></title><description><![CDATA[<p>Guten Abend und frohe Ostern,</p>
<p>ich meine mich zu erinnern, hier im Forum gelesen zu haben, gcc würde garantieren, dass das sogenannte &quot;Meyers Singleton&quot; threadsafe ist. Nur finde ich gerade weder hier im Forum den Thread noch eine offizielle Quelle dafür.</p>
<p>Frage: Gilt das für beide Formen des Meyers Singeltons, also für die mit Referenzen genauso wie die mit Pointern?</p>
<p>Ich kenne nämlich zwei implementierungen der getInstance()-Funktion, die sich beide Meyers Singleton nennen:</p>
<pre><code class="language-cpp">static Singleton* getInstance() {
    static Singleton instance;
    return &amp;instance;
}
</code></pre>
<p>und mit Referenzen:</p>
<pre><code class="language-cpp">static Singleton&amp; getInstance() {
    static Singleton instance;
    return instance;
}
</code></pre>
<p>Ich würde letztere bevorzugen und wüsste gerne, ob es eine offizielle Quelle dafür gibt, dass das in gcc threadsafe ist.</p>
<p>Gruß,<br />
Philipp</p>
<p>...und viele dicke bunte Eier!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877609</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Sun, 04 Apr 2010 19:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 19:48:19 GMT]]></title><description><![CDATA[<p>Wenn das für das eine gilt, dass auch für das andere. Eine Referenz ist nur eine andere Syntax für einen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877610</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 04 Apr 2010 19:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 20:04:55 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>Frage: Gilt das für beide Formen des Meyers Singeltons, also für die mit Referenzen genauso wie die mit Pointern?</p>
</blockquote>
<p>Ist es wirklich threadsafe im GCC? Falls es mit Zeigern threadsafe ist, gilt das auch für Referenzen und umgekehrt.</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Eine Referenz ist nur eine andere Syntax für einen Zeiger.</p>
</blockquote>
<p>Das stimmt ja wohl definitiv nicht. Auch wenn du das vielleicht anders gemeint hast, kann so eine Aussage sehr irreführend sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877616</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 04 Apr 2010 20:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 20:31:45 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Eine Referenz ist nur eine andere Syntax für einen Zeiger.</p>
</blockquote>
<p>Das stimmt ja wohl definitiv nicht. Auch wenn du das vielleicht anders gemeint hast, kann so eine Aussage sehr irreführend sein.</p>
</blockquote>
<p>Warum stimmt das denn nicht? Eine Referenz macht genau dasselbe wie ein Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877632</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 04 Apr 2010 20:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 20:36:58 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Warum stimmt das denn nicht? Eine Referenz macht genau dasselbe wie ein Zeiger.</p>
</blockquote>
<p>Muss ich das hier echt erklären? <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>
<p>Was ist mit Null?<br />
Mit Veränderbarkeit?<br />
Mit Initialisierung?<br />
Mit Objekt-Status?</p>
<p>Alles <strong>semantische</strong> Unterschiede, welche für den Benutzer <strong>nicht</strong> egal sind!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877636</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 04 Apr 2010 20:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 21:25:05 GMT]]></title><description><![CDATA[<p>Kann dir nicht zum gcc speziell was sagen, aber theoretisch muss der Compiler die Initialisierung des Singletons mit nem mutex schützen, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877654</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Apr 2010 21:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 21:36:41 GMT]]></title><description><![CDATA[<p>Ja, threadsicher ... zumindest bei aktuellen Versionen, wenn Du es nicht explizit über -fno-threadsafe-statics ausschaltest. Ab welcher Version das so gemacht wird, müsstest Du mal in der <a href="http://gcc.gnu.org/onlinedocs/" rel="nofollow">Doku</a> nachschauen. std::string aus libstdc++ hat ja inzwischen auch eine threadsichere copy-on-write Implementierung. In der kommenden C++ Version wird das auch alles so garantiert.</p>
<p>Allerdings gibt's da noch ein kleines potentielles Problem bei diesem Ansatz: Die Objekte werden in irgendeiner Reihenfolge auch wieder zerstört. Wenn Du zwei Singletons hast, wobei das eine vom andern abhängt, kann das schon mal beim Programmende schief gehen -- nämlich dann, wenn das &quot;falsche&quot; zuersrt zerstört wird.</p>
<p>Ohne da jetzt richtig viel drüber nachgedacht zu haben, würde ich sagen, es macht Sinn einen shared_ptr dafür anzulegen:</p>
<pre><code class="language-cpp">shared_ptr&lt;MySingleton&gt; getInstante()
{
  static shared_ptr&lt;MySingleton&gt; sp =
    make_shared&lt;MySingleton&gt;();
  return sp;
}
</code></pre>
<p>Solange es mindestens einen shared_ptr auf so ein Objekt gibt, während es noch benötigt wird, und es sonst keine Kreise von Verweisen gibt, sollte das alles sauber funktionieren -- auch das Aufräumen nachdem die main-Funktion fertig ist. Natürlich muss man beim Zugriff auf ein Singleton-Objekt, welches von mehreren Threads aus benutzt werden soll, auf Threadsicherheit achten -- das heißt: Mutexes und Locks benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877655</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 04 Apr 2010 21:36:41 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Sun, 04 Apr 2010 23:34:07 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Was ist mit Null?<br />
Mit Veränderbarkeit?<br />
Mit Initialisierung?<br />
Mit Objekt-Status?</p>
<p>Alles <strong>semantische</strong> Unterschiede, welche für den Benutzer <strong>nicht</strong> egal sind!</p>
</blockquote>
<p>Darum geht es hier doch gar nicht. Es geht darum, dass ein Zeiger auf Speicher zeigt und eine Referenz ebenfalls. Dabei verhalten sich beide am Ende gleich (siehe Anfangsfrage).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877669</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 04 Apr 2010 23:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Mon, 05 Apr 2010 09:15:07 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Darum geht es hier doch gar nicht. Es geht darum, dass ein Zeiger auf Speicher zeigt und eine Referenz ebenfalls. Dabei verhalten sich beide am Ende gleich (siehe Anfangsfrage).</p>
</blockquote>
<p>Ja, meistens wird das wohl der Fall sein. Ich bestreite gar nicht, dass es hier keine Rolle spielt.</p>
<p>Es geht mir darum, dass Sätze wie &quot;Eine Referenz ist nur eine andere Syntax für einen Zeiger&quot; oder &quot;Eine Referenz macht genau dasselbe wie ein Zeiger&quot; ohne Relativierung grober Unfug sind und jeden verunsichern, der mit der Materie noch nicht vertraut ist. Schliesslich sind Sprachmittel aus der Sicht des Programmierers zu betrachten; wie der kompilierten Assemblercode aussieht, steht nicht im Vordergrund. Und auf C++-Ebene sind Zeiger und Referenzen eben unterschiedliche Konzepte, und zwar nicht nur was die Syntax betrifft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877725</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 05 Apr 2010 09:15:07 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Mon, 05 Apr 2010 09:30:49 GMT]]></title><description><![CDATA[<p>Siehe in meiner Signatur der Link über Singletons <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/1877733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877733</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Mon, 05 Apr 2010 09:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to Meyers Singleton Threadsafe in gcc ? on Mon, 05 Apr 2010 09:52:32 GMT]]></title><description><![CDATA[<p>evilissimo schrieb:</p>
<blockquote>
<p>Siehe in meiner Signatur der Link über Singletons <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>
</blockquote>
<p>Verstehe ich nicht. Steht da, ob &quot;Meyers Singleton Threadsafe in gcc&quot; sind?</p>
<p>Lecker klingt vom GCC-Handbuch <a href="http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/C_002b_002b-Dialect-Options.html#C_002b_002b-Dialect-Options" rel="nofollow">http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/C_002b_002b-Dialect-Options.html#C_002b_002b-Dialect-Options</a></p>
<blockquote>
<p>-fno-threadsafe-statics<br />
Do not emit the extra code to use the routines specified in the C++ ABI for thread-safe initialization of local statics. You can use this option to reduce code size slightly in code that doesn't need to be thread-safe.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1877740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877740</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 05 Apr 2010 09:52:32 GMT</pubDate></item></channel></rss>