<?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[contition_variable beispiel von cplusplus.com]]></title><description><![CDATA[<p>hola,</p>
<p>auf <a href="http://cplusplus.com" rel="nofollow">cplusplus.com</a> gibts ein beispiel fuer condition_variable:</p>
<pre><code>// condition_variable_any::notify_all
#include &lt;iostream&gt;           // std::cout
#include &lt;thread&gt;             // std::thread
#include &lt;mutex&gt;              // std::mutex
#include &lt;condition_variable&gt; // std::condition_variable_any

std::mutex mtx;
std::condition_variable_any cv;
bool ready = false;

void print_id (int id) {
  mtx.lock();
  while (!ready) cv.wait(mtx); // (1)
  // ...
  std::cout &lt;&lt; &quot;thread &quot; &lt;&lt; id &lt;&lt; '\n';
  mtx.unlock();
}

void go() {
  mtx.lock();
  ready = true;
  cv.notify_all();
  mtx.unlock();
}

int main ()
{
  std::thread threads[10];
  // spawn 10 threads:
  for (int i=0; i&lt;10; ++i)
    threads[i] = std::thread(print_id,i);

  std::cout &lt;&lt; &quot;10 threads ready to race...\n&quot;;
  go();                       // go!

  for (auto&amp; th : threads) th.join();

  return 0;
}
</code></pre>
<p>warum steht da in zeile (1) while ? reicht hier nicht ein if ?</p>
<p>wenn ready false ist, dann wartet er ja darauf, das sich die variable aendert.sobald er vc.wait(mtx) aus dem aufruf zurueckkehrt ist doch die ready auf true gesetzt. warum wird das dann nochmal abgefragt ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338202/contition_variable-beispiel-von-cplusplus-com</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 20:04:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338202.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 May 2016 18:20:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to contition_variable beispiel von cplusplus.com on Mon, 30 May 2016 18:20:37 GMT]]></title><description><![CDATA[<p>hola,</p>
<p>auf <a href="http://cplusplus.com" rel="nofollow">cplusplus.com</a> gibts ein beispiel fuer condition_variable:</p>
<pre><code>// condition_variable_any::notify_all
#include &lt;iostream&gt;           // std::cout
#include &lt;thread&gt;             // std::thread
#include &lt;mutex&gt;              // std::mutex
#include &lt;condition_variable&gt; // std::condition_variable_any

std::mutex mtx;
std::condition_variable_any cv;
bool ready = false;

void print_id (int id) {
  mtx.lock();
  while (!ready) cv.wait(mtx); // (1)
  // ...
  std::cout &lt;&lt; &quot;thread &quot; &lt;&lt; id &lt;&lt; '\n';
  mtx.unlock();
}

void go() {
  mtx.lock();
  ready = true;
  cv.notify_all();
  mtx.unlock();
}

int main ()
{
  std::thread threads[10];
  // spawn 10 threads:
  for (int i=0; i&lt;10; ++i)
    threads[i] = std::thread(print_id,i);

  std::cout &lt;&lt; &quot;10 threads ready to race...\n&quot;;
  go();                       // go!

  for (auto&amp; th : threads) th.join();

  return 0;
}
</code></pre>
<p>warum steht da in zeile (1) while ? reicht hier nicht ein if ?</p>
<p>wenn ready false ist, dann wartet er ja darauf, das sich die variable aendert.sobald er vc.wait(mtx) aus dem aufruf zurueckkehrt ist doch die ready auf true gesetzt. warum wird das dann nochmal abgefragt ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2497491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2497491</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 30 May 2016 18:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to contition_variable beispiel von cplusplus.com on Mon, 30 May 2016 18:29:21 GMT]]></title><description><![CDATA[<p>Je nach System kann es sogenannte <a href="https://en.wikipedia.org/wiki/Spurious_wakeup" rel="nofollow">&quot;spurious Wakeups&quot;</a> geben. D.h. die Condition variable kann auch benachrichtigt werden (notify) ohne dass die Bedingung, auf die man eigentlich warten möchte, eingetreten ist. Daher muss man hier selbst nochmal sicherstellen, dass <code>ready</code> auch tatsächlich gesetzt wurde.</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2497492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2497492</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Mon, 30 May 2016 18:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to contition_variable beispiel von cplusplus.com on Mon, 30 May 2016 20:15:24 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>D.h. die Condition variable kann auch benachrichtigt werden (notify) ohne dass die Bedingung, auf die man eigentlich warten möchte, eingetreten ist.</p>
</blockquote>
<p>Finde ich jetzt zumindest komisch formuliert. Ich würde sagen: <code>wait</code> kann (darf) zurückkommen ohne dass irgendwo <code>notify</code> aufgerufen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2497505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2497505</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 30 May 2016 20:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to contition_variable beispiel von cplusplus.com on Mon, 30 May 2016 21:04:25 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Finnegan schrieb:</p>
<blockquote>
<p>D.h. die Condition variable kann auch benachrichtigt werden (notify) ohne dass die Bedingung, auf die man eigentlich warten möchte, eingetreten ist.</p>
</blockquote>
<p>Finde ich jetzt zumindest komisch formuliert. Ich würde sagen: <code>wait</code> kann (darf) zurückkommen ohne dass irgendwo <code>notify</code> aufgerufen wurde.</p>
</blockquote>
<p>Ja, da ist was dran. Ich wollte damit eigentlich nur hervorheben, dass &quot;notify&quot; eine Benachrichtigung der CV ist (ohne damit explizit die Methoden der CV zu meinen), da Meep Meep auf dem Gebiet noch Neueinsteiger ist. Die Spurious Wakeups betrachte ich auch als &quot;Benachrichtigung&quot; also ein &quot;notify&quot; der CV, allerdings extern ausgelöst. Wenn ichs so nochmal lese ist es allerdings tatsächlich etwas missverständlich formuliert. Natürlich ruft das System nicht die notify-Methode der CV auf, sondern aktiviert lediglich den Thread und holt ihn aus dem Wartemodus. Deine Formulierung bringt aber auf den Punkt was eigentlich wirklich wichtig ist.</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2497512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2497512</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Mon, 30 May 2016 21:04:25 GMT</pubDate></item></channel></rss>