<?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[Frage zu Threads]]></title><description><![CDATA[<p>Hallo ich hätte mal ein paar Fragen zu Threads, bzw. etwas genauer zu einem Programm das ich geschrieben habe.</p>
<p>Am Anfang werden zwei Threads erstellt. Es soll nun jeder der beiden Threads darauf warten bis der andere eine gewisse aktion ausgeführt hat, dass funktioniert über zwei bool Variablen die global definiert sind.</p>
<p>funktionsweise:</p>
<p>Thread_1 setzt _bool1 auf true und wartet danach bis _bool2 auf true ist.</p>
<pre><code class="language-cpp">while(run)
{
  _bool1 = true;
  i++;

  while(!_bool2)
  {

  }

  _bool2 = false;
}
</code></pre>
<p>Thread_2 wartet bis _bool1 auf true ist und schaltet dann _bool2 auf true und _bool1 auf false</p>
<pre><code class="language-cpp">while(run)
{
  while(!_bool1)
  {

  }

  i++;

  _bool1 = false;
  _bool2 = true;
}
</code></pre>
<p>Das Hauptprogramm bricht jetzt nach einer Sekunde das ganze wieder ab(run auf false) und jeder Thread gibt an wie oft er ausgeführt wurde(über die lokale Variable i)<br />
Das Programm funktioniert auch recht gut nur irgendwie sehr langsam.<br />
Nach einer Sekunde habe ich bei beiden nur 30-40 durchläufe!</p>
<p>Habe beide mal ohne das Warten laufen lassen:</p>
<pre><code class="language-cpp">while(run)
{
   i++;
}
</code></pre>
<p>und kommme dabei auf astronomische Zahlen. Kann es sien das es etwas mit dem Schreiben und Lesen auf die globalen Variablen zu tun hat, das das ganze so langsam wird.<br />
Ich hab leider von der Thread Programmierung noch so gut wie keine Ahnung,</p>
<p>wäre also schön wenn mir einer helfen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118255/frage-zu-threads</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 09:17:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118255.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Aug 2005 17:46:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Threads on Tue, 16 Aug 2005 17:46:46 GMT]]></title><description><![CDATA[<p>Hallo ich hätte mal ein paar Fragen zu Threads, bzw. etwas genauer zu einem Programm das ich geschrieben habe.</p>
<p>Am Anfang werden zwei Threads erstellt. Es soll nun jeder der beiden Threads darauf warten bis der andere eine gewisse aktion ausgeführt hat, dass funktioniert über zwei bool Variablen die global definiert sind.</p>
<p>funktionsweise:</p>
<p>Thread_1 setzt _bool1 auf true und wartet danach bis _bool2 auf true ist.</p>
<pre><code class="language-cpp">while(run)
{
  _bool1 = true;
  i++;

  while(!_bool2)
  {

  }

  _bool2 = false;
}
</code></pre>
<p>Thread_2 wartet bis _bool1 auf true ist und schaltet dann _bool2 auf true und _bool1 auf false</p>
<pre><code class="language-cpp">while(run)
{
  while(!_bool1)
  {

  }

  i++;

  _bool1 = false;
  _bool2 = true;
}
</code></pre>
<p>Das Hauptprogramm bricht jetzt nach einer Sekunde das ganze wieder ab(run auf false) und jeder Thread gibt an wie oft er ausgeführt wurde(über die lokale Variable i)<br />
Das Programm funktioniert auch recht gut nur irgendwie sehr langsam.<br />
Nach einer Sekunde habe ich bei beiden nur 30-40 durchläufe!</p>
<p>Habe beide mal ohne das Warten laufen lassen:</p>
<pre><code class="language-cpp">while(run)
{
   i++;
}
</code></pre>
<p>und kommme dabei auf astronomische Zahlen. Kann es sien das es etwas mit dem Schreiben und Lesen auf die globalen Variablen zu tun hat, das das ganze so langsam wird.<br />
Ich hab leider von der Thread Programmierung noch so gut wie keine Ahnung,</p>
<p>wäre also schön wenn mir einer helfen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853609</guid><dc:creator><![CDATA[Lx386]]></dc:creator><pubDate>Tue, 16 Aug 2005 17:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Tue, 16 Aug 2005 18:39:09 GMT]]></title><description><![CDATA[<p>Ich glaub ich hab im falschen Forum geposted</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853642</guid><dc:creator><![CDATA[Lx386]]></dc:creator><pubDate>Tue, 16 Aug 2005 18:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Tue, 16 Aug 2005 20:44:32 GMT]]></title><description><![CDATA[<p>Das von Dir beobachtete Verhalten ist leicht zu erkläen, wenn man weiß, dass auch in einer Multithread-Umgebung auf herkömmlichen Rechnern immer nur genau ein Thread zu einer Zeit läuft. Das Betriebsystem sorgt dafür, dass die Threads sich untereinander abwechseln; so dass jeder mal dran kommt.</p>
<p>Mal angenommen, der Thread_1 ist gerade dran. Dann rennt er solange in dieser Schleife</p>
<pre><code class="language-cpp">while(!_bool2)
  {

  }
</code></pre>
<p>bis endlich Thread_2 vom Betriebsystem aktiviert wird. Thread_2 setzt dann bool2 auf true und verfängt sich in der Schleife</p>
<pre><code class="language-cpp">while(!_bool1)
  {

  }
</code></pre>
<p>da Thread_2 vorher bool1 auf false gesetzt hat. Das geht solange, bis das Betriebsyystem meint, dass mal wieder wer anders dran ist; z.B. thread_1 usw.<br />
D.h. mit Hilfe dieses Programms misst Du die Thread-Wechselzeiten des Betriebssystems - so 30-40 pro Sekunde kommt gut hin; würde ich sagen.</p>
<p>Das was Du dort tust, nennt man pollen. Sowas sollte man tunlichst vermeiden, da die CPU nur mit Warten beschäftigt wird.<br />
Wenn Du mehr über Thread-Synchronisierung im besonderen und Thread-Programmierung im Allgemeinen erfahren möchtest, so schaue Dir mal <a href="http://www.boost.org/doc/html/threads.html" rel="nofollow">http://www.boost.org/doc/html/threads.html</a> an. Mit dieser Bibliothek geht Thread-Programmierung sehr einfach und weiterführende Links sind dort auch zu finden.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853710</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 16 Aug 2005 20:44:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Wed, 17 Aug 2005 09:13:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>programmierst du das unter Windows oder Linux? Das macht nämlich einen Unterschied. Aber erstmal zum wesentlichen. Du hast Glück, dass dein Programm überhaupt läuft, denn normalerweise sollten solche geteilten Variablen (die von beiden Threads genutzt werden) durch mutexes geschützt werden. Das hat nicht nur den Vorteil, dass Seg Faults abegefangen werden, sonder die Threads werden auch darüber informiert, dass die Variable von jemand anderem geändert wurde, und es nötig ist, sie erneut aus dem Speicher zu lesen, und sie nicht weiter aus dem Register zu lesen.<br />
Dieses Problem hat bei mir schon zu _eigenartigen_ Ergebnissen geführt.</p>
<p>Gruß Mea</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853976</guid><dc:creator><![CDATA[Meaculpa]]></dc:creator><pubDate>Wed, 17 Aug 2005 09:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Wed, 17 Aug 2005 10:16:42 GMT]]></title><description><![CDATA[<p>bool variablen (thread laueft oder nich) zur Threadkommunikation verwenden, iss nich ganz so der sache dienlich ...</p>
<p>unter windows gibts dafuer die events (schau nach CreateEvent, SetEvent ...)<br />
Da events selber schon synchronisationsobjecte sind, musst die nicht schuetzen (Mutex, oder CriticalSektion unter windows)<br />
Auf events kann man auch sehr einfach &quot;warten&quot; (WaitforSingleObject, WaitForMultiObject)</p>
<p>unter linux und pthread kenn ich mich ned so aus ... aber es sollte da aehnliche mechanismen geben ....</p>
<p>Oder du abreitest Unix typisch mit prozessen, dann hasst die probleme mit dem Threads und dem schuetzen der daten nich ... dafuer musst aber die informationen ueber IPC von einem Prozess zum anderen expliziet schleussen ...</p>
<p>Themen sind dann im groben Signale, Pipes, Shared memory, sockets ....</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854052</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Wed, 17 Aug 2005 10:16:42 GMT</pubDate></item></channel></rss>