<?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[&amp;quot;==&amp;quot; Operator atomar?]]></title><description><![CDATA[<p>Hallo,</p>
<p>so wie ich das sehe sind ein paar Operatoren atomar auf atomaren Typen. Z.B. &quot;++&quot;.<br />
Ist den der &quot;==&quot; Operator ebenfalls atomar? Kann ein Vergleich über atomar passieren?</p>
<p>Code als Beispiel ware z.B. so:</p>
<pre><code>std::atomic&lt;bool&gt; myBool = true;
if(myBool == true) // do something
</code></pre>
<p>Hier ist doch das laden von myBool atomar und &quot;true&quot; passiert lokal. Also thread-safe ist die Anweisung aber kann man bei &quot;==&quot; von einer atomaren Operation sprechen?</p>
<p>Danke für die Aufklärung</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337907/quot-quot-operator-atomar</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 13:56:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337907.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 May 2016 07:23:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 07:23:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>so wie ich das sehe sind ein paar Operatoren atomar auf atomaren Typen. Z.B. &quot;++&quot;.<br />
Ist den der &quot;==&quot; Operator ebenfalls atomar? Kann ein Vergleich über atomar passieren?</p>
<p>Code als Beispiel ware z.B. so:</p>
<pre><code>std::atomic&lt;bool&gt; myBool = true;
if(myBool == true) // do something
</code></pre>
<p>Hier ist doch das laden von myBool atomar und &quot;true&quot; passiert lokal. Also thread-safe ist die Anweisung aber kann man bei &quot;==&quot; von einer atomaren Operation sprechen?</p>
<p>Danke für die Aufklärung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495312</guid><dc:creator><![CDATA[uiDasIstSchoen]]></dc:creator><pubDate>Tue, 10 May 2016 07:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 07:37:31 GMT]]></title><description><![CDATA[<pre><code>mybool == true
</code></pre>
<p>kannst du dir auf Assemblerebene wie folgt vorstellen:</p>
<pre><code>load mybool
test
</code></pre>
<p>Es ist also sehr wohl möglich, dass der Thread nach dem Laden von mybool unterbrochen wird, ein anderer Thread läuft und mybool auf False setzt -&gt; Race Condition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495313</guid><dc:creator><![CDATA[ethon_]]></dc:creator><pubDate>Tue, 10 May 2016 07:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 07:47:17 GMT]]></title><description><![CDATA[<p>hmm, dann sind also alle Operatoren wie !=, &gt;= &lt;,&gt;, &lt;= nicht thread-sicher.<br />
wie sieht es dann beim &quot;&amp;=&quot; Operator aus der laut C++11 doku atomar ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495315</guid><dc:creator><![CDATA[uiistdasSchoen]]></dc:creator><pubDate>Tue, 10 May 2016 07:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:06:08 GMT]]></title><description><![CDATA[<p>uiistdasSchoen schrieb:</p>
<blockquote>
<p>hmm, dann sind also alle Operatoren wie !=, &gt;= &lt;,&gt;, &lt;= nicht thread-sicher.</p>
</blockquote>
<p>Welche Implementierung von <code>atomic</code> hat denn Vergleichsoperatoren?</p>
<p>uiistdasSchoen schrieb:</p>
<blockquote>
<p>wie sieht es dann beim &quot;&amp;=&quot; Operator aus der laut C++11 doku atomar ist?</p>
</blockquote>
<p>Atomar heißt atomar. Der Operator ist sicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495319</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 10 May 2016 08:06:08 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:13:36 GMT]]></title><description><![CDATA[<p>Ich kann jetzt zwar spontan keine Stelle aus dem Standard zitieren, aber beim Vergleich zwischen T und atomic&lt;T&gt; sollte &quot;operator T() const;&quot; zum Zuge kommen =&gt; der Vergleich ist thread safe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495322</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 10 May 2016 08:13:36 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:14:17 GMT]]></title><description><![CDATA[<p>wie sieht es mit dem &quot;&lt;&lt;&quot; shift operatoren aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495323</guid><dc:creator><![CDATA[uiistdasschoen]]></dc:creator><pubDate>Tue, 10 May 2016 08:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:15:34 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich kann jetzt zwar spontan keine Stelle aus dem Standard zitieren, aber beim Vergleich zwischen T und atomic&lt;T&gt; sollte &quot;operator T() const;&quot; zum Zuge kommen =&gt; der Vergleich ist thread safe.</p>
</blockquote>
<p>sicher? das steht nun im gegensatz zu ethon_'s Antwort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495324</guid><dc:creator><![CDATA[uiistdasschoen]]></dc:creator><pubDate>Tue, 10 May 2016 08:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:18:35 GMT]]></title><description><![CDATA[<p>ethon_ schrieb:</p>
<blockquote>
<pre><code>mybool == true
</code></pre>
<p>kannst du dir auf Assemblerebene wie folgt vorstellen:</p>
<pre><code>load mybool
test
</code></pre>
<p>Es ist also sehr wohl möglich, dass der Thread nach dem Laden von mybool unterbrochen wird, ein anderer Thread läuft und mybool auf False setzt -&gt; Race Condition.</p>
</blockquote>
<p>Das ist vollkommen wurscht.<br />
Selbst wenn das load + test ein atomarer Block wären könnte die Variable sofort nach diesem Block auf <code>false</code> gesetzt werden.</p>
<p>Fehlen würde nur die &quot;Reaktion&quot; im if bzw. else Zweig mit in den atomaren Block rein zu nehmen. Und das können atomics nicht.</p>
<p>Man kann es aber oft gut mit CAS nachbilden. Und mit transactional memory kann man überhaupt einfach so tun als wäre es so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495325</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 May 2016 08:18:35 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:23:06 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Ich kann jetzt zwar spontan keine Stelle aus dem Standard zitieren, aber beim Vergleich zwischen T und atomic&lt;T&gt; sollte &quot;operator T() const;&quot; zum Zuge kommen =&gt; der Vergleich ist thread safe.</p>
</blockquote>
<p>Oh tatsächlich. Ein impliziter Konvertierungsoperator in einer <em>neuen</em> Komponente der Standardbibliothek. Warum machen die so etwas?</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Man kann es aber oft gut mit CAS nachbilden. Und mit transactional memory kann man überhaupt einfach so tun als wäre es so.</p>
</blockquote>
<p>Was kann man nachbilden? Ein Spinlock?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495326</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 10 May 2016 08:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:42:05 GMT]]></title><description><![CDATA[<p>Jetzt bin ich verwirrt.</p>
<p>Sind nun Vergleichsoperatoren (==, !=, &lt;= etc) thread-safe im Sinne des C++-Standards? Wie sieht es mit älteren Standards aus? (Atomar sind sie ja nicht wie ich nun gelernt habe)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495327</guid><dc:creator><![CDATA[uiistdasschoen]]></dc:creator><pubDate>Tue, 10 May 2016 08:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 08:53:07 GMT]]></title><description><![CDATA[<p>Wenn du ein atomic Object in einem Vergleich verwendest, wird sein Wert benötigt und das Laden des Wertes erfolgt natürlich atomar. Die Frage ist: Was genau versprichst du dir davon? Anfangen kannst du damit am Ende sowieso nix...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495328</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 10 May 2016 08:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 09:08:41 GMT]]></title><description><![CDATA[<p>Naja, ich würde einfach gerne wissen ob z.B. ein shift auf einem atomic int atomar und thread-safe ist (keine data races). Also z.B.</p>
<p>std::atomic&lt;int&gt; myInt = 9;</p>
<p>myInt = myInt &gt;&gt; 4;</p>
<p>oder</p>
<p>myInt &gt;&gt;= 4;</p>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495331</guid><dc:creator><![CDATA[uiistdasschoen]]></dc:creator><pubDate>Tue, 10 May 2016 09:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 09:26:09 GMT]]></title><description><![CDATA[<p>Hat keine Data Races, die Operation als Ganzes ist aber nicht atomar...was hat das nun mit == zu tun? Abgesehen davon: Nur weil etwas atomar ist, heißt noch lange nicht, dass Code, der es verwendet, threadsafe ist...</p>
<p>Wenn du wissen willst, was für Operationen atomar sind, wieso nicht einfach <a href="http://en.cppreference.com/w/cpp/atomic/atomic" rel="nofollow">in die Doku</a> schauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495335</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 10 May 2016 09:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 10:30:18 GMT]]></title><description><![CDATA[<p>Danke aber kannst Du darauf ncohmal genauer eingehen:</p>
<blockquote>
<p>Hat keine Data Races</p>
</blockquote>
<p>Was hat keine Data races und warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495355</guid><dc:creator><![CDATA[uidasistschoen]]></dc:creator><pubDate>Tue, 10 May 2016 10:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 12:14:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::atomic&lt;int&gt; myInt = 9; 

myInt = myInt &gt;&gt; 4;
</code></pre>
<p>Hat keine Data Races weil alle nebenläufigen Zugriffe auf geteilte Objekte atomic sind. Es gibt aber keine Garantie darüber, welchen Wert myInt am Ende genau haben wird, wenn dieser Code nebenläufig ausgeführt wird. Das einzige, das gesichert ist, ist, dass es sich um einen der möglichen Werte, die aus einer der möglichen Serialisierungen aller Zugriffe resultieren, handelt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495357</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 10 May 2016 12:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 12:27:15 GMT]]></title><description><![CDATA[<p>ah, du meinst also es ist nicht thread-safe, aber data race frei sozusagen !?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495394</guid><dc:creator><![CDATA[uidasistschoen]]></dc:creator><pubDate>Tue, 10 May 2016 12:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 12:29:53 GMT]]></title><description><![CDATA[<p>sozusagen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495396</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 10 May 2016 12:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;==&amp;quot; Operator atomar? on Tue, 10 May 2016 21:15:47 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Man kann es aber oft gut mit CAS nachbilden. Und mit transactional memory kann man überhaupt einfach so tun als wäre es so.</p>
</blockquote>
<p>Was kann man nachbilden? Ein Spinlock?</p>
</blockquote>
<p>Atomare &quot;if (cond) do_stuff();&quot; Blöcke.</p>
<p>Mit CAS geht es natürlich nur sehr begrenzt. Und natürlich muss man Retries machen falls einem wer zwischen dem Test und dem CAS für's &quot;updaten&quot; dazwischengefahren ist.</p>
<p>EDIT: Was ich vielleicht dazuschreiben sollte: D.h. ne klassische Spinlock/Mutex muss es oft nicht sein. So Sachen wie &quot;if (a &lt; 123) a++;&quot; lassen sich mit Load + Test + CAS + Retry ganz ohne Spinlock/Mutex machen.<br />
Quasi</p>
<pre><code class="language-cpp">auto expected = a.load(std::memory_order_relaxed);        // Load
while (expected &lt; 123)                                    // Test &amp; Retry
    if (a.compare_exchange_weak(expected, expected + 1))  // CAS
        break;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2495413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495413</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 May 2016 21:15:47 GMT</pubDate></item></channel></rss>