<?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[[boost_thread] Beispielprogramm geht nicht]]></title><description><![CDATA[<p>Ich habe folgendes Beispielprogramm gefunden:</p>
<pre><code class="language-cpp">#include &lt;boost/thread/thread.hpp&gt;
#include &lt;boost/thread/mutex.hpp&gt;
#include &lt;iostream&gt;
boost::mutex io_mutex;

struct count
{
    count(int id) : id(id)
    { }
    void operator()()
    {
        for (int i = 0; i &lt; 100; ++i)
        {
            {
                boost::mutex::scoped_lock lock (io_mutex);
                std::cout &lt;&lt; id &lt;&lt; &quot;: &quot; &lt;&lt; i &lt;&lt; std::endl;
            }
        }
    }
    int id;
};
int main(int argc, char* argv[])
{
    boost::thread thrd1(count(1));
    boost::thread thrd2(count(2));
    thrd1.join();
    thrd2.join();
    return 0;
}
</code></pre>
<p>Eigentlich hätte ich erwartet, dass die Beiden Threads unabhängig voneinander hochzählen und die Ausgabe etwas &quot;Gemischt&quot; ist. funktioniert leider nicht ganz, zuerst kommen sämmtliche des 1. dannn alle des 2.</p>
<p>Könnte daran liegen, dass der erste Thread schon fertig ist bevor ein reschedule auftritt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178767/boost_thread-beispielprogramm-geht-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 00:51:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178767.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Apr 2007 16:30:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [boost_thread] Beispielprogramm geht nicht on Sat, 14 Apr 2007 16:30:46 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Beispielprogramm gefunden:</p>
<pre><code class="language-cpp">#include &lt;boost/thread/thread.hpp&gt;
#include &lt;boost/thread/mutex.hpp&gt;
#include &lt;iostream&gt;
boost::mutex io_mutex;

struct count
{
    count(int id) : id(id)
    { }
    void operator()()
    {
        for (int i = 0; i &lt; 100; ++i)
        {
            {
                boost::mutex::scoped_lock lock (io_mutex);
                std::cout &lt;&lt; id &lt;&lt; &quot;: &quot; &lt;&lt; i &lt;&lt; std::endl;
            }
        }
    }
    int id;
};
int main(int argc, char* argv[])
{
    boost::thread thrd1(count(1));
    boost::thread thrd2(count(2));
    thrd1.join();
    thrd2.join();
    return 0;
}
</code></pre>
<p>Eigentlich hätte ich erwartet, dass die Beiden Threads unabhängig voneinander hochzählen und die Ausgabe etwas &quot;Gemischt&quot; ist. funktioniert leider nicht ganz, zuerst kommen sämmtliche des 1. dannn alle des 2.</p>
<p>Könnte daran liegen, dass der erste Thread schon fertig ist bevor ein reschedule auftritt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266057</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sat, 14 Apr 2007 16:30:46 GMT</pubDate></item><item><title><![CDATA[Reply to [boost_thread] Beispielprogramm geht nicht on Sat, 14 Apr 2007 17:15:20 GMT]]></title><description><![CDATA[<p>Mach doch mal mehr als 100. So 100.000 oder sowas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266079</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 14 Apr 2007 17:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to [boost_thread] Beispielprogramm geht nicht on Sat, 14 Apr 2007 17:34:52 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>Eigentlich hätte ich erwartet, dass die Beiden Threads unabhängig voneinander hochzählen und die Ausgabe etwas &quot;Gemischt&quot; ist. funktioniert leider nicht ganz, zuerst kommen sämmtliche des 1. dannn alle des 2.</p>
<p>Könnte daran liegen, dass der erste Thread schon fertig ist bevor ein reschedule auftritt?</p>
</blockquote>
<p>Das dürfte daran liegen, das der einzige Zeitraum, in dem ein Threadwechsel stattfinden kann, der Zeitraum zwischen Freigabe und Wiederanforderung des Mutex ist, genau in diesem Moment müsste der Scheduler einspringen, das ist nicht sehr wahrscheinlich, besonders bei so wenig Zyklen. Ein sleep vor der Anforderung des Mutex zeigt möglicherweise interessanteres Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266090</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 14 Apr 2007 17:34:52 GMT</pubDate></item></channel></rss>