<?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[volatile auf single-core]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir ist klar dass volatile auf multi-core für thread-sicheren Zugriff nicht geeignet ist. Wie sieht es aber bei einem volatile zwischen fences auf einem single-core aus? Hier können doch ebenfalls interrupts passieren und damit meherere Zugriffe auf eine variable zwischen den fences kaputt machen. Wenn ich aber nur einen einzigen schreibzugriff zwischen den fences habe, ware dann die Deklaration der variable als volatile sicher bezüglich interrupts?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338725/volatile-auf-single-core</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 07:01:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338725.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jul 2016 10:29:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to volatile auf single-core on Tue, 05 Jul 2016 10:29:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir ist klar dass volatile auf multi-core für thread-sicheren Zugriff nicht geeignet ist. Wie sieht es aber bei einem volatile zwischen fences auf einem single-core aus? Hier können doch ebenfalls interrupts passieren und damit meherere Zugriffe auf eine variable zwischen den fences kaputt machen. Wenn ich aber nur einen einzigen schreibzugriff zwischen den fences habe, ware dann die Deklaration der variable als volatile sicher bezüglich interrupts?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501291</guid><dc:creator><![CDATA[uitob]]></dc:creator><pubDate>Tue, 05 Jul 2016 10:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Tue, 05 Jul 2016 10:41:38 GMT]]></title><description><![CDATA[<p>fences? Was ist das, wo wird das im Standard definiert?</p>
<p>Single core? Was ist das denn für eine veraltete Technologie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501293</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 05 Jul 2016 10:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Tue, 05 Jul 2016 10:47:42 GMT]]></title><description><![CDATA[<p>Single-core ist immer noch unter uns.<br />
Fences z.B. wenn man boost::fences nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501296</guid><dc:creator><![CDATA[uitob]]></dc:creator><pubDate>Tue, 05 Jul 2016 10:47:42 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Tue, 05 Jul 2016 12:48:46 GMT]]></title><description><![CDATA[<p>Wenn du ein Data Race ohne <code>volatile</code> hast, hast du auch eins mit <code>volatile</code> . Egal, ob es scheinbar funktioniert.</p>
<p>Vielleicht ist dein Fall vom Standard abgedeckt und immer threadsafe. Das hätte dann gar nichts mit der Anzahl der Kerne zu tun.</p>
<p>Wenn es undefiniertes Verhalten ist, hängt es vom Compiler ab, ob dein Fall sicher ist.</p>
<p>Wenn du wirklich nur &quot;einen einzigen Schreibzugriff&quot; hast und sonst keine gleichzeitigen Zugriffe, ist es doch sowieso sicher. Was ist das vollständige Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501316</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 05 Jul 2016 12:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Tue, 05 Jul 2016 16:10:37 GMT]]></title><description><![CDATA[<p>uitob schrieb:</p>
<blockquote>
<p>Wie sieht es aber bei einem volatile zwischen fences auf einem single-core aus?</p>
</blockquote>
<p><code>volatile</code> ist hier weder nötig noch hinreichend.<br />
Nicht nötig, weil du ja sowieso die Fences hast. Und nicht hinreichend, weil <code>volatile</code> nicht garantiert dass die Zugriffe atomar erfolgen.</p>
<p>Wenn du z.B. auf ner 32 Bit CPU nen <code>volatile long long</code> (=min. 64 Bit) schreibst, dann kann es leicht sein dass der Compiler zwei oder mehr Instruktionen daraus macht. Z.B. weil die CPU einfach keine Operation hat mit der man 64 Bit Werte auf einmal lesen oder schreiben kann. Das ist dann nicht mehr atomar. Auch auf Single-Core nicht. (Ich gehe mal davon aus dass wir keine Interrupts disablen oder ähnliche krasse Eingriffe vornehmen.)</p>
<p>uitob schrieb:</p>
<blockquote>
<p>Hier können doch ebenfalls interrupts passieren und damit meherere Zugriffe auf eine variable zwischen den fences kaputt machen.</p>
</blockquote>
<p>Das sowieso, ja. Wenn es um mehr als einen einzigen Zugriff geht, dann kann da immer was dazwischenpfuschen.</p>
<p>uitob schrieb:</p>
<blockquote>
<p>Wenn ich aber nur einen einzigen schreibzugriff zwischen den fences habe, ware dann die Deklaration der variable als volatile sicher bezüglich interrupts?</p>
</blockquote>
<p>Nein, siehe Erklärung oben.<br />
<code>volatile</code> impliziert nicht <code>atomic</code> (und <code>atomic</code> impliziert nicht <code>volatile</code> ).</p>
<p>Verwende einfach die selben Konstrukte wie du sie auch auf Multi-Core Systemen verwenden würdest.<br />
Wenn der Compiler weiss dass das System Single-Core ist, und dass man daher bestimmte Dinge mit weniger Overhead machen kann, dann wird er hoffentlich schlau genug sein entsprechend &quot;billigen&quot; Code zu erzeugen.</p>
<p>Oder du richtest dich nach dem was die die Plattform (CPU + OS + Compiler) garantiert. Dann hast du zwar plattformabhängigen Code, aber so lange du auf dieser Plattform bleibst ist natürlich trotzdem garantiert dass es funktioniert. Und was genau dir die Plattform garantiert, das kann dir nur die Plattform sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501349</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 05 Jul 2016 16:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Wed, 06 Jul 2016 06:18:19 GMT]]></title><description><![CDATA[<p>Danke Hustbaer für Deine präzise Antwort. So macht das Forum Spaß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501381</guid><dc:creator><![CDATA[uitob]]></dc:creator><pubDate>Wed, 06 Jul 2016 06:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Thu, 07 Jul 2016 18:03:42 GMT]]></title><description><![CDATA[<p>Hallo, noch eine Frage: ich habe mir den callstack angeschaut was unter C++11 unter den atomics passiert. Hier sehe ich zwischen MemoryBarrer() Aufrufen ein __iso_volatile_store32 (compiler ist Microsoft VS).</p>
<p>Jetzt meine Frage: scheinbar benutzt microsoft hier doch volatile zwischen barriern? Kann jemand hierzu noch eine Stellung nehmen (auch im Hinblick zu oben)? Warum klappt das dann scheinbar doch hinsichtlich Thread-Sicherheit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501549</guid><dc:creator><![CDATA[uitob]]></dc:creator><pubDate>Thu, 07 Jul 2016 18:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to volatile auf single-core on Fri, 08 Jul 2016 09:36:45 GMT]]></title><description><![CDATA[<p>Wo ist da ein voltaile? Im Funktionsnamen? Wieso sollte das was mit dem Keyword <code>volatile</code> zu tun haben?<br />
Und selbst wenn...<br />
Wenn MSVC zusätzlich zu dem was der Standard sagt/verlangt die Garantie gibt dass volatile Loads/Stores immer atomar sind, so lange das Alignment passt (was er tut)... wieso sollte MSVC diese eigene Garantie nicht auch bei der (eigenen, nur mit MSVC verwendbaren!) Implementierung der Standard Library nutzen?</p>
<p>-&gt;</p>
<p>Wenn man sich auf compilerspezifische Dinge verlassen will, dann kann man mit <code>volatile</code> je nach Compiler schon viel anfangen. Hab ich ja bereits geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501606</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 08 Jul 2016 09:36:45 GMT</pubDate></item></channel></rss>