<?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 Problem]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe ein Multithreading Problem, vielleicht verstehe ich auch nur was falsch, aber so langsam bin ich mir da nicht mehr sicher, vielleicht ist es auch nur ein kleiner Fehler (den ich mal wieder nicht so schnell sehe. Das ganze Programm kann ich leider nicht hochsetzen, aber bei Nachfragen kann ich schon Teile mal reinsetzen.</p>
<p>So jetzt erst mal zu mein Problem:</p>
<p>Mein Programm funktioniert kurioser Weise völlig korrekt, wenn ich viele Sachen in Dateien schreibe (was mich am meisten zum verzweifeln bringt). Nehme ich diese aber heraus ensteht ein Speicherzugriffsfehler. So jetzt möchte ich erst mal mein Verständnis von Threads geben. Threads sind Teile von Prozessen, die aber Zugriff auf die Daten des Hauptprozesses haben (was bei mir ja auch funktioniert). Mutexe sperren bei mir den Zugriff auf jede Schreibaktion auf die Festplatte (trotz unterschiedlicher Dateien) oder auf dem Bildschirm. Leseoperationen auf globale Variablen, an den Thread übergebene Variablen oder im Thread erstellten Variabeln werden nich geschützt. Das ist doch korrekt so, oder??</p>
<p>Diese Thread-Funktion wird jetzt etwa einmal oder bis zu 16 mal gleichzeitig durchlaufen. Wenn nur ein Thread durchläuft funktioniert es einwandfrei, laufen mehr Threads (meist 16) kommt es zum Speicherzugriffsfehler. Wo der Fehler aber genau liegt kann ich schlecht definieren. Habe das Programm auch schon mehrmals verändert, hatte mal keine globalen Variabeln, habe das Thread-Programm verändert, aber nichts hat geholfen. Kann mir jemand helfen? Wie gesagt, denke Programmstücke kommen während des Gesprächs!??!</p>
<p>LG andy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218698/multithreading-problem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 21:18:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218698.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Jul 2008 22:55:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading Problem on Wed, 23 Jul 2008 22:55:45 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe ein Multithreading Problem, vielleicht verstehe ich auch nur was falsch, aber so langsam bin ich mir da nicht mehr sicher, vielleicht ist es auch nur ein kleiner Fehler (den ich mal wieder nicht so schnell sehe. Das ganze Programm kann ich leider nicht hochsetzen, aber bei Nachfragen kann ich schon Teile mal reinsetzen.</p>
<p>So jetzt erst mal zu mein Problem:</p>
<p>Mein Programm funktioniert kurioser Weise völlig korrekt, wenn ich viele Sachen in Dateien schreibe (was mich am meisten zum verzweifeln bringt). Nehme ich diese aber heraus ensteht ein Speicherzugriffsfehler. So jetzt möchte ich erst mal mein Verständnis von Threads geben. Threads sind Teile von Prozessen, die aber Zugriff auf die Daten des Hauptprozesses haben (was bei mir ja auch funktioniert). Mutexe sperren bei mir den Zugriff auf jede Schreibaktion auf die Festplatte (trotz unterschiedlicher Dateien) oder auf dem Bildschirm. Leseoperationen auf globale Variablen, an den Thread übergebene Variablen oder im Thread erstellten Variabeln werden nich geschützt. Das ist doch korrekt so, oder??</p>
<p>Diese Thread-Funktion wird jetzt etwa einmal oder bis zu 16 mal gleichzeitig durchlaufen. Wenn nur ein Thread durchläuft funktioniert es einwandfrei, laufen mehr Threads (meist 16) kommt es zum Speicherzugriffsfehler. Wo der Fehler aber genau liegt kann ich schlecht definieren. Habe das Programm auch schon mehrmals verändert, hatte mal keine globalen Variabeln, habe das Thread-Programm verändert, aber nichts hat geholfen. Kann mir jemand helfen? Wie gesagt, denke Programmstücke kommen während des Gesprächs!??!</p>
<p>LG andy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552707</guid><dc:creator><![CDATA[Jimmie1973]]></dc:creator><pubDate>Wed, 23 Jul 2008 22:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Wed, 23 Jul 2008 23:07:53 GMT]]></title><description><![CDATA[<p>void * subRoutine (void * args){</p>
<p>unsigned int helper, helpen;</p>
<p>unsigned int* helping;</p>
<p>TrickyThing thread = <em>((TrickyThing</em>)args);</p>
<p>set&lt;vector&lt;unsigned int&gt; &gt; setA;</p>
<p>vector &lt;unsigned int&gt; helps(4);</p>
<p>pthread_mutex_lock(&amp;mutex);</p>
<p>Matrix Ergebnis(thread.path.c_str());</p>
<p>pthread_mutex_unlock(&amp;mutex);<br />
int q = 0;<br />
for (int i=0; i&lt;Ergebnis.get_row();++i){<br />
for (vector&lt;unsigned int*&gt;::iterator k = variabel.begin(); k != variabel.end(); ++k){<br />
helping = *k;<br />
if (helping[1]!=Ergebnis.get_element(i, thread.column)) continue;<br />
if (setA.size()&gt;50000000){<br />
if (thread.column==0){<br />
helper=Ergebnis.get_element(i-1, 1);<br />
helpen=Ergebnis.get_element(i, 1);<br />
}else{<br />
helper=Ergebnis.get_element(i-1, 0);<br />
helpen=Ergebnis.get_element(i, 0);<br />
}<br />
if (helper!= helpen){<br />
pthread_mutex_lock(&amp;mutex);<br />
if (q==0){<br />
outfile_set(setA,(thread.secondpath).c_str(),1);<br />
q=1;<br />
}else{<br />
outfile_set(setA,(thread.secondpath).c_str(),0);<br />
}<br />
setA.clear();<br />
cout &lt;&lt; thread.message &lt;&lt; &quot; calculates &quot; &lt;&lt; i &lt;&lt; &quot; of &quot; &lt;&lt; Ergebnis.get_row() &lt;&lt; &quot; rows...&quot;&lt;&lt; endl &lt;&lt; endl;<br />
pthread_mutex_unlock(&amp;mutex);<br />
}<br />
}<br />
for (int l=1; l&lt;=helping[0]; ++l){<br />
for (int m=0; m&lt;4;++m){<br />
if(thread.column==m){<br />
helps[m] = helping[l];<br />
} else {<br />
helps[m] = Ergebnis.get_element(i, m);<br />
}<br />
}<br />
setA.insert(helps);<br />
}<br />
}<br />
}</p>
<p>pthread_mutex_lock(&amp;mutex);</p>
<p>if (q==0){<br />
outfile_set(setA,(thread.secondpath).c_str(),1);<br />
}else{<br />
outfile_set(setA,(thread.secondpath).c_str(),0);<br />
}</p>
<p>remove (thread.path.c_str());<br />
pthread_mutex_unlock(&amp;mutex);<br />
setA.clear();</p>
<p>pthread_exit (0);</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552708</guid><dc:creator><![CDATA[Jimmie1973]]></dc:creator><pubDate>Wed, 23 Jul 2008 23:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Wed, 23 Jul 2008 23:16:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void * subRoutine (void * args)
{

    unsigned int helper, helpen;

    unsigned int* helping;

    TrickyThing thread = *((TrickyThing*)args);

    set&lt;vector&lt;unsigned int&gt; &gt; setA;

    vector &lt;unsigned int&gt; helps(4);

    pthread_mutex_lock(&amp;mutex);

    Matrix Ergebnis(thread.path.c_str());

    pthread_mutex_unlock(&amp;mutex);
    int q = 0;
    for (int i=0; i&lt;Ergebnis.get_row();++i)
    {
        for (vector&lt;unsigned int*&gt;::iterator k = variabel.begin(); k != variabel.end(); ++k)
        {
            helping = *k;
            if (helping[1]!=Ergebnis.get_element(i, thread.column)) continue;
            if (setA.size()&gt;50000000)
            {
                if (thread.column==0)
                {
                    helper=Ergebnis.get_element(i-1, 1);
                    helpen=Ergebnis.get_element(i, 1);
                }
                else
                {
                    helper=Ergebnis.get_element(i-1, 0);
                    helpen=Ergebnis.get_element(i, 0);
                }
                if (helper!= helpen)
                {
                    pthread_mutex_lock(&amp;mutex);
                    if (q==0)
                    {
                        outfile_set(setA,(thread.secondpath).c_str(),1);
                        q=1;
                    }
                    else
                    {
                        outfile_set(setA,(thread.secondpath).c_str(),0);
                    }
                    setA.clear();
                    cout &lt;&lt; thread.message &lt;&lt; &quot; calculates &quot; &lt;&lt; i &lt;&lt; &quot; of &quot; &lt;&lt; Ergebnis.get_row() &lt;&lt; &quot; rows...&quot;&lt;&lt; endl &lt;&lt; endl;
                    pthread_mutex_unlock(&amp;mutex);
                }
            }
            for (int l=1; l&lt;=helping[0]; ++l)
            {
                for (int m=0; m&lt;4;++m)
                {
                    if (thread.column==m)
                    {
                        helps[m] = helping[l];
                    }
                    else
                    {
                        helps[m] = Ergebnis.get_element(i, m);
                    }
                }
                setA.insert(helps);
            }
        }
    }

    pthread_mutex_lock(&amp;mutex);

    if (q==0)
    {
        outfile_set(setA,(thread.secondpath).c_str(),1);
    }
    else
    {
        outfile_set(setA,(thread.secondpath).c_str(),0);
    }

    remove (thread.path.c_str());
    pthread_mutex_unlock(&amp;mutex);
    setA.clear();

    pthread_exit (0);

}
</code></pre>
<p>edit: nur um dem augenkrebs vorzubeugen und es für etwaige helfer lesbarer zu gestalten. ich selbst hab' heute nacht aber keinen drang mehr, mich da durchzuwurschteln <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1552709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552709</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Wed, 23 Jul 2008 23:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Wed, 23 Jul 2008 23:26:49 GMT]]></title><description><![CDATA[<p>Denke mal vieles ist selbsterklärend einiges wieder um nicht:</p>
<p>Also es wird eine Matrix aus einer Datei eingelesen, dessen Pfad ich durch den Threadaufrufer übergebe. Dieses Angabe und noch mehr befinden sich im struct Trickything. Dann wird die Matrix, die immer aus vier Zahlen pro Reihe besteht, pro Spalte aufgelöst. Ich habe einen Container variabel der Varianten einer Zahl beinhaltet, jede Zeile, in der die Zahl in der aktuellen Spalte vorkommt, wird eine identische Zeile mit den Varianten erstellt. Die Übergabe der Daten sind völlig korrekt, die Funktion selber ist auch korrekt, es lief auch bei Multithreading korrekt, nur wenn ich die Funktion mehrmals hintereinander aufrufe, entsteht ein Speicherzugriffsfehler. Und da wäre ich um Eure Hilfe dankbar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552710</guid><dc:creator><![CDATA[Jimmie1973]]></dc:creator><pubDate>Wed, 23 Jul 2008 23:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 01:51:39 GMT]]></title><description><![CDATA[<p>helper, helpen, helping, helps ... willst du uns verarschen?</p>
<p>nenn mal deine variablen so um dass man weiss wozu sie gut sind, mach ein paar kommentare rein was der code tut, und dann poste das ganze nochmal mit den relevanten stellen des restlichen programms.<br />
vielleicht tut es sich dann jmd. an dein programm anzugucken.</p>
<p>und bitte schreib doch netterweise dazu WO genau es das programm zerreisst. wenn du das nicht weisst ist das gleich deine nächste aufgabe: finde es raus. genau dafür gibt es debug builds und debugger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552716</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 24 Jul 2008 01:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 02:26:34 GMT]]></title><description><![CDATA[<p>hmm was machst du denn mit den pfaden? welche du über die Trickything struktur übergibst? sind diese konstant?</p>
<p>am ende der routine machs du ja sowas:</p>
<pre><code class="language-cpp">remove (thread.path.c_str());
</code></pre>
<p>ist das nich kritisch wenn diu</p>
<pre><code class="language-cpp">thread.path.c_str();
</code></pre>
<p>in mehren trhead verwendest?</p>
<p>nur ne vermutung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552723</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 24 Jul 2008 02:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 07:38:49 GMT]]></title><description><![CDATA[<p>Jimmie1973 schrieb:</p>
<blockquote>
<p>Leseoperationen auf globale Variablen, an den Thread übergebene Variablen oder im Thread erstellten Variabeln werden nich geschützt. Das ist doch korrekt so, oder??</p>
</blockquote>
<p>globale Variablen ... wenn sie read only sind, also nicht veraendert werden waehrend ein thread laeuft.<br />
an den Thread übergebene Variablen ... wenn sie per-value uebergeben wurden bzw aus anderen threads nicht schreibend referenziert werden<br />
Thread erstellten Variabeln ... wenn es keine 'static' und keine an andere threads weitergegebene variablen sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552792</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Thu, 24 Jul 2008 07:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 07:56:04 GMT]]></title><description><![CDATA[<p>Und wenn man schon auf eine globale Variable zugreifen muss, dann kann man selbigen Vorgang ja ganz kurz durch ne Semaphore absichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552811</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Thu, 24 Jul 2008 07:56:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 08:41:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void * subRoutine (void * args)
{
    // Ist die Hilfsvariable für die Varianten

    unsigned int* helping;

    // übergibt Variablen, u. a. Thread.path und Thread.secondPath: beides unterschiedliche Dateinamen für jeden erstellten Thread, ergo kein Problem bei remove oder beim Schreiben

    TrickyThing thread = *((TrickyThing*)args);

    // Ein Set was die neuen Ergebniszeilen übernimmt

    set&lt;vector&lt;unsigned int&gt; &gt; setA;

    // Eine aktuelle Zeile

    vector &lt;unsigned int&gt; helps(4);

    pthread_mutex_lock(&amp;mutex);

    // Die Matrix, die aus einer Datei eingelesen wird

    Matrix Ergebnis(thread.path.c_str());

    pthread_mutex_unlock(&amp;mutex);

    // q: 1: Die Datei wurde schon mal beschrieben
    // 0: Die Datei ist unbeschrieben

    int q = 0;

    // Erste Schleife die Zeilen der Matrix werden durchgegangen

    for (int i=0; i&lt;Ergebnis.get_row();++i)
    {
       // Der Vector der Varianten wird durchgegangen

       for (vector&lt;unsigned int*&gt;::iterator k = variabel.begin(); k != variabel.end(); ++k)
        {
            helping = *k;

            // Vergleichen, ob der Wert in der Zeile gleich dem Wert der ersten Zahl ist, wenn nicht soll er die nächste Variante nehmen. Laut gdb entsteht hier ein Fehler. 

            if (helping[1]!=Ergebnis.get_element(i, thread.column)) continue;

           // Zunächst habe ich ein Stück Code weggelassen, da es nur die Ergebnisse schon vorher wegschreibt. ab hier werden die neuen Ergebniszeilen erstellt

            for (int l=1; l&lt;=helping[0]; ++l)
            {
                for (int m=0; m&lt;4;++m)
                {
                    if (thread.column==m)
                    {
                        helps[m] = helping[l];
                    }
                    else
                    {
                        helps[m] = Ergebnis.get_element(i, m);
                    }
                }
                setA.insert(helps);
            }
        }
    }

    pthread_mutex_lock(&amp;mutex);

    // Schreiben des sets in die Datei

    if (q==0)
    {
        outfile_set(setA,(thread.secondpath).c_str(),1);
    }
    else
    {
        outfile_set(setA,(thread.secondpath).c_str(),0);
    }

    // Löschen der Ursprungsdatei
    remove (thread.path.c_str());
    pthread_mutex_unlock(&amp;mutex);
    setA.clear();

    pthread_exit (0);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1552850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552850</guid><dc:creator><![CDATA[Jimmie1973]]></dc:creator><pubDate>Thu, 24 Jul 2008 08:41:36 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 08:48:10 GMT]]></title><description><![CDATA[<blockquote>
<p>hmm was machst du denn mit den pfaden? welche du über die Trickything struktur übergibst? sind diese konstant?</p>
</blockquote>
<p>Sind von Thread zu Thread unterschiedlich, deswegen gibt es beim remove wohl kein Problem!</p>
<blockquote>
<p>globale Variablen ... wenn sie read only sind, also nicht veraendert werden waehrend ein thread laeuft.<br />
an den Thread übergebene Variablen ... wenn sie per-value uebergeben wurden bzw aus anderen threads nicht schreibend referenziert werden<br />
Thread erstellten Variabeln ... wenn es keine 'static' und keine an andere threads weitergegebene variablen sind.</p>
</blockquote>
<p>Genau so verstehe ich das auch. Lese die Variablen auch nur!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552854</guid><dc:creator><![CDATA[Jimmie 1973]]></dc:creator><pubDate>Thu, 24 Jul 2008 08:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 14:22:04 GMT]]></title><description><![CDATA[<p>ich gebe zu thread debugging isdt nicht das einfachste, aber fang doch bitte einfach mal ein mit printf() oder cout zu arbeiten. übergebe dem tread einen eindeutigen identifizierer damit du debugausgaben mit printf() gezielt steuern kannst. prüfe wo es tatsächlich kracht. kommentare und printf() sind die einfachsten debughilfsmittel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> anhand dieses codes jedenfalls kann man nur mutmaßen, ich tippe sogar eher auf bugs ausserhalb dieses codes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553071</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Thu, 24 Jul 2008 14:22:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 14:33:54 GMT]]></title><description><![CDATA[<p>Wobei man auf den Inhalt der Ausgaben mit printf und cout nicht zuviel geben sollte. Wenn mehrere Threads gleichzeitig darauf zugreifen wird's Buchstabensuppe <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/1553073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553073</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Thu, 24 Jul 2008 14:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 14:38:02 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Wobei man auf den Inhalt der Ausgaben mit printf und cout nicht zuviel geben sollte. Wenn mehrere Threads gleichzeitig darauf zugreifen wird's Buchstabensuppe <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>
</blockquote>
<p>deswegen erwähnte ich ja eine möglichkeit wie man gezielt nur einen thread definieren kann, der debugausgaben macht <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/1553075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553075</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Thu, 24 Jul 2008 14:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Thu, 24 Jul 2008 14:51:49 GMT]]></title><description><![CDATA[<p>Hmm.. ich habe genug Ausgaben, die ich nur hier zur Vereinfachung herausgenommen habe. Laut gdb stürzt das Programm in der Zeile 44 ab. Aber irgendwie kann das nicht sein. Denn die entnommen Werte liegen im korrekten Bereich. Das Problem taucht eher mehr im mehrfachen Duchlaufen des Threadprogramms auf. Frage mich da eher, ob ich irgendein Speicherbereich nicht korrekt frei gemacht habe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553085</guid><dc:creator><![CDATA[Jimmie1973]]></dc:creator><pubDate>Thu, 24 Jul 2008 14:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 03:20:32 GMT]]></title><description><![CDATA[<p>dann kommentier mal code aus... schritt für schritt... und probier ob es dann mit mehere thread funktioniert..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553306</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 25 Jul 2008 03:20:32 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 07:03:38 GMT]]></title><description><![CDATA[<p>sothis_ schrieb:</p>
<blockquote>
<p>ich gebe zu thread debugging isdt nicht das einfachste, aber fang doch bitte einfach mal ein mit printf() oder cout zu arbeiten.</p>
</blockquote>
<p>Das nennt sich auch <a href="http://en.wikipedia.org/wiki/Shotgun_debugging" rel="nofollow">Shotgun Debugging</a> und ist ein beliebtes <a href="http://en.wikipedia.org/wiki/Anti_pattern" rel="nofollow">AntiPattern</a>. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>@OP:<br />
Da du anscheinend unter einen unixoidem BS arbeitest, versuch mal helgrind aus der <a href="http://www.valgrind.org" rel="nofollow">Valgrind-Suite</a>. Die anderen Tools wie z.B. memcheck können dir auch helfen Fehler zu finden, wenn Speicherzugriffsfehler vorkommen.</p>
<p>Du solltest außerdem z.B. globale Variablen, übergebene Variablen etc., die von mehreren Threads gelesen werden und sich potenziell ändern können, mit volatile qualifizieren. Das hält den Compiler von gefährlichen Optimierungen (Annahmen über Unveränderbarkeit) im Multithreading Bereich ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553341</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 25 Jul 2008 07:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 07:52:26 GMT]]></title><description><![CDATA[<p>Synchronisier doch zunächst einmal den Zugriff auf jede nicht-Stack-Variable, wenn dann die Methode fehlerfrei durchläuft lockerst du den Zugriff Schritt für Schritt, ab da wo es den Fehler gibt weiß du ja welche Variable zuletzt freigegeben wurde, dann sperr den Zugriff auf alle bis auf diese und wenn es dann immernoch kracht hast du den Übeltäter gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553366</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Fri, 25 Jul 2008 07:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 07:53:28 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Synchronisier doch zunächst einmal den Zugriff auf jede nicht-Stack-Variable,[...]</p>
</blockquote>
<p>Hiermit meine ich natürlich nur die Stack-Variablen die nicht an andere Methoden übergeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553368</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Fri, 25 Jul 2008 07:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 08:47:08 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Tippgeber schrieb:</p>
<blockquote>
<p>Synchronisier doch zunächst einmal den Zugriff auf jede nicht-Stack-Variable,[...]</p>
</blockquote>
<p>Hiermit meine ich natürlich nur die Stack-Variablen die nicht an andere Methoden übergeben werden.</p>
</blockquote>
<p>Und für wie wahrscheinlich hältst du es, dass der Fehler nach Änderungen in der Synchronisierung noch auftritt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> &quot;Der Versuch verändert das Experiment&quot;...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553403</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 25 Jul 2008 08:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 09:12:34 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Tippgeber schrieb:</p>
<blockquote>
<p>Tippgeber schrieb:</p>
<blockquote>
<p>Synchronisier doch zunächst einmal den Zugriff auf jede nicht-Stack-Variable,[...]</p>
</blockquote>
<p>Hiermit meine ich natürlich nur die Stack-Variablen die nicht an andere Methoden übergeben werden.</p>
</blockquote>
<p>Und für wie wahrscheinlich hältst du es, dass der Fehler nach Änderungen in der Synchronisierung noch auftritt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> &quot;Der Versuch verändert das Experiment&quot;...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> man passt die Umgebung Schrittweise wieder der alten an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553425</guid><dc:creator><![CDATA[_idea_]]></dc:creator><pubDate>Fri, 25 Jul 2008 09:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 09:14:59 GMT]]></title><description><![CDATA[<p><em>idea</em> schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> man passt die Umgebung Schrittweise wieder der alten an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
</blockquote>
<p>Super Idee. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Und was ist, wenn das Problem <em>nur</em> in der ursprünglichlen Umgebung auftritt - wie es bei Multithreadingfehlern sehr häufig der Fall ist? Genau das ist Shotgun Debugging.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553426</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 25 Jul 2008 09:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 09:20:04 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p><em>idea</em> schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> man passt die Umgebung Schrittweise wieder der alten an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
</blockquote>
<p>Super Idee. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Und was ist, wenn das Problem <em>nur</em> in der ursprünglichlen Umgebung auftritt - wie es bei Multithreadingfehlern sehr häufig der Fall ist? Genau das ist Shotgun Debugging.</p>
</blockquote>
<p>Während du noch da sitzt und das Problem errätst haben andere das Problem mit ihrer Shotgutn längst erlegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553430</guid><dc:creator><![CDATA[Schießwütiger]]></dc:creator><pubDate>Fri, 25 Jul 2008 09:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading Problem on Fri, 25 Jul 2008 09:24:30 GMT]]></title><description><![CDATA[<p>Oder glauben es, erledigt zu haben...</p>
<p>Hast du meinen Beitrag weiter oben <em>gelesen</em>? Race-Condition-Profiler? Verändert zwar auch das Experiment, aber nicht den ursprünglichen Code. Und zeigt dir auch artig mögliche Race-Conditions an, nicht nur tatsächlich aufgetretene. Und - ist ein systematisches und zielgerichtetes Vorgehen, anstatt wild, nach eigenem Gutdünken irgendwo Code einzustreuen, der den ursprünglichen Fehler vielleicht unauffindbar macht. Aber anscheinend bevorzugst du letztere Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553433</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 25 Jul 2008 09:24:30 GMT</pubDate></item></channel></rss>