<?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[Variablenzugriff Threadsafe.]]></title><description><![CDATA[<p>Hallo,<br />
folgendes. Wenn ich Zwei Threads hab und eine Variable.</p>
<p>Thread 1:</p>
<pre><code class="language-cpp">while (running) {
   [...]
}
</code></pre>
<p>Thread 2 sagt irgendwann:</p>
<pre><code class="language-cpp">running = FALSE;
</code></pre>
<p>Ist das Threadsafe, oder brauche ich einen Mutex dafür? Es gibt ja nur einen Thread der schreibt. Hab irgendwo gelesen, dass der lesende Thread inkonsistente Daten lesen könnte, wenn ein lese und ein schreib Thread existieren. Ist das hier auch der Fall?</p>
<p>Schonmal danke, für eure Mühe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162979/variablenzugriff-threadsafe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 10:45:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162979.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Oct 2006 18:14:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:14:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
folgendes. Wenn ich Zwei Threads hab und eine Variable.</p>
<p>Thread 1:</p>
<pre><code class="language-cpp">while (running) {
   [...]
}
</code></pre>
<p>Thread 2 sagt irgendwann:</p>
<pre><code class="language-cpp">running = FALSE;
</code></pre>
<p>Ist das Threadsafe, oder brauche ich einen Mutex dafür? Es gibt ja nur einen Thread der schreibt. Hab irgendwo gelesen, dass der lesende Thread inkonsistente Daten lesen könnte, wenn ein lese und ein schreib Thread existieren. Ist das hier auch der Fall?</p>
<p>Schonmal danke, für eure Mühe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160611</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:14:35 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:17:01 GMT]]></title><description><![CDATA[<p>die variable muss glaub ich mit dem schlüsselwort volatile versehen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160615</guid><dc:creator><![CDATA[kall]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:17:01 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:28:21 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>Hab irgendwo gelesen, dass der lesende Thread inkonsistente Daten lesen könnte, wenn ein lese und ein schreib Thread existieren. Ist das hier auch der Fall?</p>
</blockquote>
<p>wenn für's lesen oder schreiben mehr als eine asm-instruction nötig sind, dann brauchste 'nen lock, sonst sollte das ohne gehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160624</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:28:21 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:28:26 GMT]]></title><description><![CDATA[<p>da c++ keine threads kennt, gibt es auch kein schlüsselwort dafür <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="🙂"
    /><br />
kann dich nich sgaen, ob das threadsafe is, denk aber schon. Wenn nich machn inlineasm mit<br />
xor running, running</p>
<p>dann isses bstimmt threadsafe.</p>
<p>volatile variablen können auch dann verändert werden, wenn das objekt const ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160625</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:28:26 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:33:14 GMT]]></title><description><![CDATA[<blockquote>
<p>volatile variablen können auch dann verändert werden, wenn das objekt const ist.</p>
</blockquote>
<p>du meinst mutable</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160630</guid><dc:creator><![CDATA[dso]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:37:17 GMT]]></title><description><![CDATA[<p>dso schrieb:</p>
<blockquote>
<blockquote>
<p>volatile variablen können auch dann verändert werden, wenn das objekt const ist.</p>
</blockquote>
<p>du meinst mutable</p>
</blockquote>
<p>nein, er mein schon volatile. Das hat den 'nebeneffekt' das wert immer aus ram gelanden wird. Daruch kann man verhinder das der compiler so optimieret, das running in nem register liegen bleibt, da schneller, und so thread a niemals den wert von b sieht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160634</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:37:16 GMT]]></title><description><![CDATA[<p>Maxi schrieb:</p>
<blockquote>
<p>volatile variablen können auch dann verändert werden, wenn das objekt const ist.</p>
</blockquote>
<p>'volatile' sorgt nur dafür, dass die variable auch wirklich im speicher existiert d.h. es verbietet gewisse optimierungen. ...und 'const' ist auch nicht wirklich const <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1160636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160636</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Tue, 24 Oct 2006 18:42:34 GMT]]></title><description><![CDATA[<p>ja, hab volatile mit mutable verwechselt. Klugscheißen lohnt sich eben doch nich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160638</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Tue, 24 Oct 2006 18:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 14:45:25 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>Maxi schrieb:</p>
<blockquote>
<p>volatile variablen können auch dann verändert werden, wenn das objekt const ist.</p>
</blockquote>
<p>'volatile' sorgt nur dafür, dass die variable auch wirklich im speicher existiert d.h. es verbietet gewisse optimierungen. ...und 'const' ist auch nicht wirklich const <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>Eine Member Variable einer Klasse liegt aber immer im Speicher. Aber <em>volatile</em> müsste hier doch trozdem gesetzt werden. Könnte ja sein, dass der Wert in einem Register zwischen gespeichert wird und nicht neugeladen wird. Oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161044</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Oct 2006 14:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 15:02:18 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>ProgChild schrieb:</p>
<blockquote>
<p>Hab irgendwo gelesen, dass der lesende Thread inkonsistente Daten lesen könnte, wenn ein lese und ein schreib Thread existieren. Ist das hier auch der Fall?</p>
</blockquote>
<p>wenn für's lesen oder schreiben mehr als eine asm-instruction nötig sind, dann brauchste 'nen lock, sonst sollte das ohne gehen...</p>
</blockquote>
<p>Das Problem ist noch weitergehend, für CPUs mit mehr als einem Hardware-Thread entstehen auch bei einzelnen Befehlen schon Inkosistenzen zwischen den verschiedenen Caches. Man kommt also nicht daran vorbei, den Cache nach dem Schreiben zu flushen und in anderen Caches diese Line neu einzulesen. Dies geschieht bei volatile-Variablen automatisch und ist u.U. sauteuer.</p>
<p>Auch spiegeln die ASM-Befehle nicht die reale CPU-Architektur wieder, die werden erst wieder in mehrere Mikrobefehle umgewandelt und auch intern parallelisiert ausgeführt. Vielleicht reicht allein das schon, um Probleme zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161075</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Oct 2006 15:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 15:05:30 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>net schrieb:</p>
<blockquote>
<p>Maxi schrieb:</p>
<blockquote>
<p>volatile variablen können auch dann verändert werden, wenn das objekt const ist.</p>
</blockquote>
<p>'volatile' sorgt nur dafür, dass die variable auch wirklich im speicher existiert d.h. es verbietet gewisse optimierungen. ...und 'const' ist auch nicht wirklich const <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>Eine Member Variable einer Klasse liegt aber immer im Speicher. Aber <em>volatile</em> müsste hier doch trozdem gesetzt werden. Könnte ja sein, dass der Wert in einem Register zwischen gespeichert wird und nicht neugeladen wird. Oder?</p>
</blockquote>
<p>Muss nicht.</p>
<pre><code class="language-cpp">class foo
{
public:
   int val;
}

void func()
{
   foo f;
   for(int i=0;i&lt;1000;i++)
   {
      f.val++;
   }
}
</code></pre>
<p>Was spricht dagegen eax als val zu betrachten und mit der schleife drüber zu laufen, ohne val im ram zu allozieren? Wird doch eh von keinem anderen gebraucht. Ok, in ist unwarscheinlich das der Fall eintritt aber es verbietet die keiner nur auf den registern, ohne push/pop oder ram, zu arbeiten so lange das verhanlten nach 'aussen' der norm entspricht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161079</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 25 Oct 2006 15:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 15:18:13 GMT]]></title><description><![CDATA[<p>CMatt schrieb:</p>
<blockquote>
<p>Was spricht dagegen eax als val zu betrachten und mit der schleife drüber zu laufen, ohne val im ram zu allozieren? Wird doch eh von keinem anderen gebraucht.</p>
</blockquote>
<p>Doch! Von dem anderen Thread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161094</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Oct 2006 15:18:13 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 15:21:11 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Das Problem ist noch weitergehend, für CPUs mit mehr als einem Hardware-Thread entstehen auch bei einzelnen Befehlen schon Inkosistenzen zwischen den verschiedenen Caches. Man kommt also nicht daran vorbei, den Cache nach dem Schreiben zu flushen und in anderen Caches diese Line neu einzulesen. Dies geschieht bei volatile-Variablen automatisch und ist u.U. sauteuer.</p>
</blockquote>
<p>Okay. Dann einen Mutex, volatile oder kein volatie und hoffen, das es klappt. Ich will nur eine Schleife, die in einem Thread abläuft, aus dem anderen beenden.</p>
<p>Optimizer schrieb:</p>
<blockquote>
<p>Auch spiegeln die ASM-Befehle nicht die reale CPU-Architektur wieder, die werden erst wieder in mehrere Mikrobefehle umgewandelt und auch intern parallelisiert ausgeführt. Vielleicht reicht allein das schon, um Probleme zu machen.</p>
</blockquote>
<p>Das war auch meine Überlegung. Es könnte ja sein, dass ein long byteweise zugewiesen wird, oder so...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161097</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Oct 2006 15:21:11 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 15:28:02 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>ProgChild schrieb:</p>
<blockquote>
<p>Hab irgendwo gelesen, dass der lesende Thread inkonsistente Daten lesen könnte, wenn ein lese und ein schreib Thread existieren. Ist das hier auch der Fall?</p>
</blockquote>
<p>wenn für's lesen oder schreiben mehr als eine asm-instruction nötig sind, dann brauchste 'nen lock, sonst sollte das ohne gehen...</p>
</blockquote>
<p>nicht auf einem Mehr-Prozessor-System (wobei die wahrscheinlichkeit dann wohl schon sehr gering sein dürfte)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161106</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 25 Oct 2006 15:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 16:16:33 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>nicht auf einem Mehr-Prozessor-System (wobei die wahrscheinlichkeit dann wohl schon sehr gering sein dürfte)</p>
</blockquote>
<p>Was passiert denn im schlimmsten Fall auf einem Multiprozessor System? Wäre ja nicht schlimm, wenn der Thread erst etwas später abgebrochen wird, wenn die Chaches Synchronisiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161137</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Oct 2006 16:16:33 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 18:01:36 GMT]]></title><description><![CDATA[<p>Es ist klar, dass du Mutexe oder andere Synchronisationsmethoden verwenden musst.</p>
<p>Das folgende Programm sieht von außen ok aus (es sei denn man ist in Multithreading geschult):</p>
<pre><code class="language-cpp">extern &quot;C&quot; {
#include &lt;pthread.h&gt;
#include &lt;unistd.h&gt;
}

#include &lt;iostream&gt;

int flag = 0;

void * th(void *) {

        sleep(5);
        flag = 1;
        std::cout &lt;&lt; &quot;Counter is now &quot; &lt;&lt; flag &lt;&lt; std::endl;
        return NULL;
}

int main() {

        pthread_t pid;
        pthread_create(&amp;pid, NULL, th, NULL);

        unsigned int counter = 0;
        while (flag == 0) {
                ++counter;
        }
        pthread_join(pid, NULL);

        std::cout &lt;&lt; &quot;Counter: &quot; &lt;&lt; counter &lt;&lt; std::endl;
}
</code></pre>
<p>Übersetzt mit</p>
<pre><code>g++ -Wall -W -pedantic -pthread -O2 thread.C
</code></pre>
<p>läuft das Programm in eine Endlosschleife.</p>
<p>volatile hilft in diesem Beispiel, ist aber keine allgemeine Lösung. Siehe</p>
<p><a href="http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf" rel="nofollow">http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161229</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Wed, 25 Oct 2006 18:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 18:10:23 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>nicht auf einem Mehr-Prozessor-System (wobei die wahrscheinlichkeit dann wohl schon sehr gering sein dürfte)</p>
</blockquote>
<p>Was passiert denn im schlimmsten Fall auf einem Multiprozessor System? Wäre ja nicht schlimm, wenn der Thread erst etwas später abgebrochen wird, wenn die Chaches Synchronisiert werden.</p>
</blockquote>
<p>Verallgemeinert gesagt, sehen verschiedene Threads unterschiedliche Werte, weil jeder seinen eigenen Cache hat. Schreiboperationen sieht eine ganze Zeit lang nur der schreibende Thread selber. Das ist katastrophal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161243</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Oct 2006 18:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Wed, 25 Oct 2006 18:32:52 GMT]]></title><description><![CDATA[<p>Wobei das auch stark von der Architektur des Systems abhängig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161276</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Wed, 25 Oct 2006 18:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Thu, 26 Oct 2006 05:55:40 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Auch spiegeln die ASM-Befehle nicht die reale CPU-Architektur wieder, die werden erst wieder in mehrere Mikrobefehle umgewandelt und auch intern parallelisiert ausgeführt.</p>
</blockquote>
<p>glaub' nicht. auch wenn's micro'code' heisst, so isses doch meistens so schnell wie ein elektron braucht um in's silizium einzudringen, damit hinten ein anderes rausfällt <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>rüdiger schrieb:</p>
<blockquote>
<p>net schrieb:</p>
<blockquote>
<p>ProgChild schrieb:</p>
<blockquote>
<p>Hab irgendwo gelesen, dass der lesende Thread inkonsistente Daten lesen könnte, wenn ein lese und ein schreib Thread existieren. Ist das hier auch der Fall?</p>
</blockquote>
<p>wenn für's lesen oder schreiben mehr als eine asm-instruction nötig sind, dann brauchste 'nen lock, sonst sollte das ohne gehen...</p>
</blockquote>
<p>nicht auf einem Mehr-Prozessor-System (wobei die wahrscheinlichkeit dann wohl schon sehr gering sein dürfte)</p>
</blockquote>
<p>jo, beim mehrprozzi haste das problem der verschachtelten bus-nutzung, da kann einer schon die speicherzelle verändert haben, während der andere erst den befehl decodiert hat. aber naja, ich meinte mit meinem posting das zeitscheiben-multitasking mit nur einer cpu. dabei ist ja ein asm-befehl nicht unterbrechbar...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161571</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Thu, 26 Oct 2006 05:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Fri, 27 Oct 2006 18:23:21 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>jo, beim mehrprozzi haste das problem der verschachtelten bus-nutzung, da kann einer schon die speicherzelle verändert haben, während der andere erst den befehl decodiert hat. aber naja, ich meinte mit meinem posting das zeitscheiben-multitasking mit nur einer cpu. dabei ist ja ein asm-befehl nicht unterbrechbar...</p>
</blockquote>
<p>Okay war jetzt das Resultat, dass ich volatile und Mutexe brauche, um sowas vernünftig zu realisieren, aber eig. volatile in der geg. Situation ausreicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162772</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Oct 2006 18:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Fri, 27 Oct 2006 21:06:42 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>net schrieb:</p>
<blockquote>
<p>jo, beim mehrprozzi haste das problem der verschachtelten bus-nutzung, da kann einer schon die speicherzelle verändert haben, während der andere erst den befehl decodiert hat. aber naja, ich meinte mit meinem posting das zeitscheiben-multitasking mit nur einer cpu. dabei ist ja ein asm-befehl nicht unterbrechbar...</p>
</blockquote>
<p>Okay war jetzt das Resultat, dass ich volatile und Mutexe brauche, um sowas vernünftig zu realisieren, aber eig. volatile in der geg. Situation ausreicht?</p>
</blockquote>
<p>Du brauchst nur Mutexe. volatile ist nicht nötig. volatile alleine ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162848</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Fri, 27 Oct 2006 21:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Fri, 27 Oct 2006 21:10:02 GMT]]></title><description><![CDATA[<p>wenn du windoofs hast, dann nimm dafür die 'InterlockedXXX' funktionen. die gehen auch bei mehreren prozessoren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162849</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 27 Oct 2006 21:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Fri, 27 Oct 2006 21:15:38 GMT]]></title><description><![CDATA[<p>Ponto schrieb:</p>
<blockquote>
<p>Du brauchst nur Mutexe. volatile ist nicht nötig. volatile alleine ist falsch.</p>
</blockquote>
<p>Warum? Solang die Synchronisation nur in eine Richtung geht und die Variable nur einmal dazu verwendet wird sehe ich kein Problem mit volatile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162851</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 27 Oct 2006 21:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Fri, 27 Oct 2006 21:20:10 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>wenn du windoofs hast, dann nimm dafür die 'InterlockedXXX' funktionen. die gehen auch bei mehreren prozessoren...</p>
</blockquote>
<p>Nein, kein Windoof. Warum ich überhaupt darauf komme. Hab mir den Quelltext von XMMS angeschaut und da scheint es komplett ohne Mutex und ihne volatile gemacht worden zu sein...</p>
<p>Naja, ich werd dann wohl einfach zu sicherheit Mutexe setzten.</p>
<p>Danke an Alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162853</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Oct 2006 21:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Fri, 27 Oct 2006 22:23:47 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Ponto schrieb:</p>
<blockquote>
<p>Du brauchst nur Mutexe. volatile ist nicht nötig. volatile alleine ist falsch.</p>
</blockquote>
<p>Warum? Solang die Synchronisation nur in eine Richtung geht und die Variable nur einmal dazu verwendet wird sehe ich kein Problem mit volatile.</p>
</blockquote>
<p>Du hast doch selbst geschrieben, dass es stark systemabhängig sei.</p>
<p>Zunächst gibt es das Totschlagargument, dass C++ selbst kein Multithreading kennt und keine volatile Semantik für Multithreadingprogramme spezifiziert wurde. Aber soweit ich weiss haben auch Systeme mit Multithreading wie POSIX 1003.1 haben keine Semantik für volatile über Threads hinweg spezifiziert.</p>
<p>Dann kann man sich immer darauf zurückziehen, dass es Systeme geben kann in denen das nicht funktioniert. Nehmen wir mal ein System an, bei dem jedes Lesen aus dem Speicher von einem Schreiben mit dem gelesenen Wert gefolgt werden muss. Was passiert nun wenn der eine Thread den Wert ändert und der andere den gleichzeitig liest?</p>
<p>Auf so einem System kann die Singlethreadingsemantik von C++ problemlos implementiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162870</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Fri, 27 Oct 2006 22:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenzugriff Threadsafe. on Sat, 28 Oct 2006 07:55:35 GMT]]></title><description><![CDATA[<p>Jo okay, ich ging jetzt von irgendner üblichen Plattform aus, was man so zu Hause hat. Also sowas wie nen AMD mit einem/mehreren Kernen oder auch nen Dualpentium oder sowas. Da sollte volatile genügen.</p>
<p>Auf ner beliebigen Plattform kann man natürlich nicht viel mehr sagen, als daß man geeignet synchronisieren muß. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1162909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162909</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 28 Oct 2006 07:55:35 GMT</pubDate></item></channel></rss>