<?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[Multithreading... der schnelle Weg zur Verzweiflung]]></title><description><![CDATA[<p>Hey,</p>
<p>ich hab' vor kurzem ein kleines Programm geschrieben, um automatisiert MD5 Prüfsummen zu verwalten. Jetzt hab' ich mir naiverweise überlegt, ich bau mal &quot;schnell&quot; Multithreading Unterstützung ein, um die Performance (auf meinem Core2Duo) zu verdoppeln... Das hab' ich vor einiger Zeit schon mal erfolgreich hingekriegt, wenn es mich auch extremst Nerven gekostet hat, das ganze zu debuggen und stabil zu kriegen.</p>
<p>Jedenfalls dachte ich, diesmal würde es klappen.... Nach zwei Tagen des erfolglosen Debuggens... nach zwei Tagen, an denen ich meinen kompletten Feierabend für diesen *** geopfert hab, frag ich doch mal Leute, die davon vielleicht etwas mehr Ahnung haben <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="🙂"
    /></p>
<p>Das Problem ist simpel: Ich habe das unten stehende Programm. Der main Thread erzeugt 30 Threads, die im Prinzip nichts machen. Egal. Jedenfalls stützt es mir ständig ab. Und damit meine ich nicht die Exception die ich werfe, sondern betriebssystemseitig:</p>
<p><a href="http://img410.imageshack.us/my.php?image=bild1un0.jpg" rel="nofollow"></a><a href="http://img410.imageshack.us/img410/8933/bild1un0.th.jpg" rel="nofollow">http://img410.imageshack.us/img410/8933/bild1un0.th.jpg</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;windows.h&quot;

using namespace std;

CRITICAL_SECTION critSectOutputAccess;

//inline
DWORD WINAPI calculateMD5HashSingle(void* lparam)
{
    EnterCriticalSection(&amp;critSectOutputAccess);
    string gster = &quot;3423423434&quot;;
    string gst2er = &quot;3423423434&quot;;
    string gszt2er = &quot;3423423434&quot;;
    string gste2r = &quot;3423423434&quot;;
    string gster2 = &quot;3423423434&quot;;
    string gste3r = &quot;3423423434&quot;;
    string gst3er = &quot;3423423434&quot;;
    string g3ster = &quot;3423423434&quot;;
    string gs3ter = &quot;3423423434&quot;;
    LeaveCriticalSection(&amp;critSectOutputAccess);
    return 0;
}

int main()
{
    try
    {
        int test = 30;
        HANDLE* threadHandles = new HANDLE[test];
        DWORD*  threadIDs     = new DWORD[test];

        InitializeCriticalSection(&amp;critSectOutputAccess);

        for (int i = 0; i &lt; test; ++i)
        {
            threadHandles[i] = CreateThread(0,0,calculateMD5HashSingle,0,0,&amp;threadIDs[i]);
            //WaitForSingleObject(threadHandles[i],INFINITE);
        }
        if (WaitForMultipleObjects(test, threadHandles, TRUE, INFINITE) == WAIT_FAILED)
            cout&lt;&lt;&quot;wait failed &quot;&lt;&lt;&quot;error code &quot;&lt;&lt;GetLastError()&lt;&lt;endl;

        DeleteCriticalSection(&amp;critSectOutputAccess);

        throw 123;
    }
    catch (int&amp; theException)
    {
        cout&lt;&lt;theException&lt;&lt;endl;
    }
    return 0;
}
</code></pre>
<p>Weiß jemand, warum dieses kleine Programm nicht stabil läuft?</p>
<p>Nur zur Info. Ich verwende Codeblocks, aktuelle Nightly mit MinGW und gcc-g++-3.4.5, eben die &quot;current&quot; Distribution.</p>
<p>Viele Grüße,<br />
ZenJu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217814/multithreading-der-schnelle-weg-zur-verzweiflung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 06:57:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217814.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Jul 2008 18:20:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading... der schnelle Weg zur Verzweiflung on Fri, 11 Jul 2008 18:20:42 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich hab' vor kurzem ein kleines Programm geschrieben, um automatisiert MD5 Prüfsummen zu verwalten. Jetzt hab' ich mir naiverweise überlegt, ich bau mal &quot;schnell&quot; Multithreading Unterstützung ein, um die Performance (auf meinem Core2Duo) zu verdoppeln... Das hab' ich vor einiger Zeit schon mal erfolgreich hingekriegt, wenn es mich auch extremst Nerven gekostet hat, das ganze zu debuggen und stabil zu kriegen.</p>
<p>Jedenfalls dachte ich, diesmal würde es klappen.... Nach zwei Tagen des erfolglosen Debuggens... nach zwei Tagen, an denen ich meinen kompletten Feierabend für diesen *** geopfert hab, frag ich doch mal Leute, die davon vielleicht etwas mehr Ahnung haben <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="🙂"
    /></p>
<p>Das Problem ist simpel: Ich habe das unten stehende Programm. Der main Thread erzeugt 30 Threads, die im Prinzip nichts machen. Egal. Jedenfalls stützt es mir ständig ab. Und damit meine ich nicht die Exception die ich werfe, sondern betriebssystemseitig:</p>
<p><a href="http://img410.imageshack.us/my.php?image=bild1un0.jpg" rel="nofollow"></a><a href="http://img410.imageshack.us/img410/8933/bild1un0.th.jpg" rel="nofollow">http://img410.imageshack.us/img410/8933/bild1un0.th.jpg</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;windows.h&quot;

using namespace std;

CRITICAL_SECTION critSectOutputAccess;

//inline
DWORD WINAPI calculateMD5HashSingle(void* lparam)
{
    EnterCriticalSection(&amp;critSectOutputAccess);
    string gster = &quot;3423423434&quot;;
    string gst2er = &quot;3423423434&quot;;
    string gszt2er = &quot;3423423434&quot;;
    string gste2r = &quot;3423423434&quot;;
    string gster2 = &quot;3423423434&quot;;
    string gste3r = &quot;3423423434&quot;;
    string gst3er = &quot;3423423434&quot;;
    string g3ster = &quot;3423423434&quot;;
    string gs3ter = &quot;3423423434&quot;;
    LeaveCriticalSection(&amp;critSectOutputAccess);
    return 0;
}

int main()
{
    try
    {
        int test = 30;
        HANDLE* threadHandles = new HANDLE[test];
        DWORD*  threadIDs     = new DWORD[test];

        InitializeCriticalSection(&amp;critSectOutputAccess);

        for (int i = 0; i &lt; test; ++i)
        {
            threadHandles[i] = CreateThread(0,0,calculateMD5HashSingle,0,0,&amp;threadIDs[i]);
            //WaitForSingleObject(threadHandles[i],INFINITE);
        }
        if (WaitForMultipleObjects(test, threadHandles, TRUE, INFINITE) == WAIT_FAILED)
            cout&lt;&lt;&quot;wait failed &quot;&lt;&lt;&quot;error code &quot;&lt;&lt;GetLastError()&lt;&lt;endl;

        DeleteCriticalSection(&amp;critSectOutputAccess);

        throw 123;
    }
    catch (int&amp; theException)
    {
        cout&lt;&lt;theException&lt;&lt;endl;
    }
    return 0;
}
</code></pre>
<p>Weiß jemand, warum dieses kleine Programm nicht stabil läuft?</p>
<p>Nur zur Info. Ich verwende Codeblocks, aktuelle Nightly mit MinGW und gcc-g++-3.4.5, eben die &quot;current&quot; Distribution.</p>
<p>Viele Grüße,<br />
ZenJu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545873</guid><dc:creator><![CDATA[ZenJu]]></dc:creator><pubDate>Fri, 11 Jul 2008 18:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading... der schnelle Weg zur Verzweiflung on Fri, 11 Jul 2008 18:29:06 GMT]]></title><description><![CDATA[<p>Vielleicht noch ne kleine Anmerkung, zu meiner Definition von &quot;stabil laufen&quot;... Das erwartete Verhalten für micht wäre, dass die Exception korrekt abgefangen wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich weiß das Programm macht so nicht viel Sinn, aber es enthält die Essenz des Fehlers mit dem ich mich rumärgere.</p>
<p>Der Fehler tritt nicht auf, wenn ich<br />
- keine Exception werfe oder<br />
- keine Strings in der Threadfunktion verwende oder<br />
- immer nur einen Thread gleichzeitig laufen lasse</p>
<p>Es scheint mir fast ein recht komplexer Fehler zu sein.... oder das sind alles nur Symptome und die Ursache liegt woanders...</p>
<p>wie auch immer... Multithreaded Programmierung muss ich langsam mal in den Griff kriegen <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545876</guid><dc:creator><![CDATA[ZenJu]]></dc:creator><pubDate>Fri, 11 Jul 2008 18:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading... der schnelle Weg zur Verzweiflung on Fri, 11 Jul 2008 18:32:02 GMT]]></title><description><![CDATA[<p>ZenJu schrieb:</p>
<blockquote>
<p>Vielleicht noch ne kleine Anmerkung, zu meiner Definition von &quot;stabil laufen&quot;... Das erwartete Verhalten für micht wäre, dass die Exception korrekt abgefangen wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>welche exception?</p>
<p>//edit ahh sehs...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545877</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 11 Jul 2008 18:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading... der schnelle Weg zur Verzweiflung on Fri, 11 Jul 2008 19:07:01 GMT]]></title><description><![CDATA[<p>Versuch mal _beginthreadex statt CreateThread.<br />
Und guck mal ob der MinGW ne Option vonwegen Threadsafe Runtime ja/nein hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545896</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 11 Jul 2008 19:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading... der schnelle Weg zur Verzweiflung on Fri, 11 Jul 2008 20:10:40 GMT]]></title><description><![CDATA[<blockquote>
<p>Und guck mal ob der MinGW ne Option vonwegen Threadsafe Runtime ja/nein hat.</p>
</blockquote>
<p>Heureka! Es funktioniert! Nach einigem Googlen habe ich herausgefunden, dass MinGW die Option -mthreads für den Linker anbietet.</p>
<p>Das Programm läuft jetzt einwandfrei!</p>
<p>Ich frage mich nur, warum diese Option so schlecht dokumentiert ist. Selbst auf der MinGW Seite hab ich darüber nichts gefunden. Dafür, dass sie für Multithreading unabdingbar scheint! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Erst hier bin ich darauf aufmerksam geworden <a href="http://kometbomb.net/2007/05/14/mthreads-mthreads-mthreads/" rel="nofollow">http://kometbomb.net/2007/05/14/mthreads-mthreads-mthreads/</a></p>
<p>... nach dem freundlichem Hinweis über mir <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545928</guid><dc:creator><![CDATA[ZenJu]]></dc:creator><pubDate>Fri, 11 Jul 2008 20:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading... der schnelle Weg zur Verzweiflung on Fri, 11 Jul 2008 21:18:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich frage mich nur, warum diese Option so schlecht dokumentiert ist.</p>
</blockquote>
<p>Jo, das frage ich mich bei den verschiedensten Dingen auch oft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545950</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 11 Jul 2008 21:18:07 GMT</pubDate></item></channel></rss>