<?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[threads synchro]]></title><description><![CDATA[<p>hi leute!</p>
<p>ich versuche gerade mit boost::threads mein glück;-) habe ne fragen...warum wird hier gib 10 gezählt? irgend etwas läuft hier schief...<br />
anders fällt mir nix ein, wie man ne schleifenbedingung schützen kann, ohne die ganze schleife zu locken.</p>
<p>cu</p>
<pre><code class="language-cpp">#include &lt;boost/thread/mutex.hpp&gt;
#include &lt;boost/thread/thread.hpp&gt;
#include &lt;iostream&gt;
#include &lt;windows.h&gt;

boost::mutex io_mutex;
unsigned int counter=0;

inline int readcounter()
{
	{
	boost::mutex::scoped_lock
		lock(io_mutex);
	}

	return counter;
} 

void thread1()
{
  while(readcounter()&lt;10)
  {
	  {	 
      boost::mutex::scoped_lock
        lock(io_mutex);

	  ++counter;

	  std::cout &lt;&lt; &quot;Thread1: &quot; &lt;&lt; counter &lt;&lt; std::endl;
	  }
	  Sleep(100);
   }
}

void thread2()
{
  while(readcounter()&lt;10)
  {
	  {	  
      boost::mutex::scoped_lock
		  lock(io_mutex);

		  ++counter;

	      std::cout &lt;&lt; &quot;Thread2: &quot; &lt;&lt; counter &lt;&lt; std::endl;
	  }
	  Sleep(100);
    }
}

int main ()
{
  boost::thread thrd1 ( &amp;thread1 );
  boost::thread thrd2 ( &amp;thread2  );

  while(readcounter()&lt;10)
  {
	  {	 
      boost::mutex::scoped_lock
        lock(io_mutex);

	  ++counter;

	  std::cout &lt;&lt; &quot;main thread: &quot; &lt;&lt; counter &lt;&lt; std::endl;
	  }
	  Sleep(100);
   }

  thrd1.join();
  thrd2.join();

  std::cin.get();
}
</code></pre>
<p>ausgabe:<br />
---------------------------<br />
Thread1: 1<br />
Thread2: 2<br />
main thread: 3<br />
Thread1: 4<br />
Thread2: 5<br />
main thread: 6<br />
Thread1: 7<br />
Thread2: 8<br />
main thread: 9<br />
Thread1: 10</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/94631/threads-synchro</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 01:04:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/94631.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Dec 2004 01:36:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to threads synchro on Sat, 11 Dec 2004 01:36:03 GMT]]></title><description><![CDATA[<p>hi leute!</p>
<p>ich versuche gerade mit boost::threads mein glück;-) habe ne fragen...warum wird hier gib 10 gezählt? irgend etwas läuft hier schief...<br />
anders fällt mir nix ein, wie man ne schleifenbedingung schützen kann, ohne die ganze schleife zu locken.</p>
<p>cu</p>
<pre><code class="language-cpp">#include &lt;boost/thread/mutex.hpp&gt;
#include &lt;boost/thread/thread.hpp&gt;
#include &lt;iostream&gt;
#include &lt;windows.h&gt;

boost::mutex io_mutex;
unsigned int counter=0;

inline int readcounter()
{
	{
	boost::mutex::scoped_lock
		lock(io_mutex);
	}

	return counter;
} 

void thread1()
{
  while(readcounter()&lt;10)
  {
	  {	 
      boost::mutex::scoped_lock
        lock(io_mutex);

	  ++counter;

	  std::cout &lt;&lt; &quot;Thread1: &quot; &lt;&lt; counter &lt;&lt; std::endl;
	  }
	  Sleep(100);
   }
}

void thread2()
{
  while(readcounter()&lt;10)
  {
	  {	  
      boost::mutex::scoped_lock
		  lock(io_mutex);

		  ++counter;

	      std::cout &lt;&lt; &quot;Thread2: &quot; &lt;&lt; counter &lt;&lt; std::endl;
	  }
	  Sleep(100);
    }
}

int main ()
{
  boost::thread thrd1 ( &amp;thread1 );
  boost::thread thrd2 ( &amp;thread2  );

  while(readcounter()&lt;10)
  {
	  {	 
      boost::mutex::scoped_lock
        lock(io_mutex);

	  ++counter;

	  std::cout &lt;&lt; &quot;main thread: &quot; &lt;&lt; counter &lt;&lt; std::endl;
	  }
	  Sleep(100);
   }

  thrd1.join();
  thrd2.join();

  std::cin.get();
}
</code></pre>
<p>ausgabe:<br />
---------------------------<br />
Thread1: 1<br />
Thread2: 2<br />
main thread: 3<br />
Thread1: 4<br />
Thread2: 5<br />
main thread: 6<br />
Thread1: 7<br />
Thread2: 8<br />
main thread: 9<br />
Thread1: 10</p>
]]></description><link>https://www.c-plusplus.net/forum/post/670686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/670686</guid><dc:creator><![CDATA[cppint]]></dc:creator><pubDate>Sat, 11 Dec 2004 01:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to threads synchro on Sat, 11 Dec 2004 11:41:48 GMT]]></title><description><![CDATA[<p>Weil du den Zähler nach der Prüfung aber vor der Ausgabe erhöhst.<br />
Erhöhe ihn mal nach der Ausgabe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/670800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/670800</guid><dc:creator><![CDATA[SirLant]]></dc:creator><pubDate>Sat, 11 Dec 2004 11:41:48 GMT</pubDate></item></channel></rss>