<?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[CAS ? Threads zusammenarbeiten lassen.]]></title><description><![CDATA[<p>HI !<br />
Ich über mich gerade in der Programmierung mit Threads.<br />
Mein Ziel ist es die Threads parallel arbeiten zu lassen.<br />
Mein Programmcode zur übersicht:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;clocale&gt;
#include &lt;locale&gt;
#include &lt;process.h&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;
//jetzt mit allen includes
#define NUM_THREADS 2
using namespace std;

unsigned __stdcall RunThreadA(void *params);
unsigned __stdcall RunThreadB(void *params);

BOOL localeSet = FALSE;

    int f=0;
int main()
{	

    HANDLE threads[NUM_THREADS];

    unsigned aID;
    threads[0] = (HANDLE)_beginthreadex(
        NULL, 0, RunThreadA, NULL, 0, &amp;aID);

    unsigned bID;
    threads[1] = (HANDLE)_beginthreadex(
        NULL, 0, RunThreadB, NULL, 0, &amp;bID);

    WaitForMultipleObjects(2, threads, TRUE, INFINITE);

    CloseHandle(threads[0]);
    CloseHandle(threads[1]);

    system(&quot;pause&quot;);
    return 0;
}

unsigned __stdcall RunThreadA(void *params)
{
    do  {
	f++;
	cout &lt;&lt; &quot;,&quot;;
	}
    while(f !=100);

    return 1;
}

unsigned __stdcall RunThreadB(void *params)
{
    do  {
	f++;
	cout &lt;&lt; &quot;.&quot;;
	}
    while(f !=100);
	localeSet = TRUE;

    return 1;
}
</code></pre>
<p>Mein Ziel ist es 100 Zeichen in der Reihenfolge ,.,.,.,.,.,.,.,., usw. in der ausgabe zu haben aber das Programm gibt mir ledigtlich ...,,...,,,,,,,... usw. aus.<br />
Ich habe es schon mit Mutex versucht aber dort war das ergebnis ähnlich.<br />
Jetzt wurde mit gesagt es sollte mit &quot;CAS&quot; klappen aber aus dem was mir die VS03 Hilfe gibt werde ich net wirklich schlau...</p>
<p>Wie schaffe ich es das die Threads Paralel arbeiten ohne sich zu überschreiben ?</p>
<p>Gruß<br />
Kaitos</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237148/cas-threads-zusammenarbeiten-lassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 14:27:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237148.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Mar 2009 09:51:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 10:50:55 GMT]]></title><description><![CDATA[<p>HI !<br />
Ich über mich gerade in der Programmierung mit Threads.<br />
Mein Ziel ist es die Threads parallel arbeiten zu lassen.<br />
Mein Programmcode zur übersicht:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;clocale&gt;
#include &lt;locale&gt;
#include &lt;process.h&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;
//jetzt mit allen includes
#define NUM_THREADS 2
using namespace std;

unsigned __stdcall RunThreadA(void *params);
unsigned __stdcall RunThreadB(void *params);

BOOL localeSet = FALSE;

    int f=0;
int main()
{	

    HANDLE threads[NUM_THREADS];

    unsigned aID;
    threads[0] = (HANDLE)_beginthreadex(
        NULL, 0, RunThreadA, NULL, 0, &amp;aID);

    unsigned bID;
    threads[1] = (HANDLE)_beginthreadex(
        NULL, 0, RunThreadB, NULL, 0, &amp;bID);

    WaitForMultipleObjects(2, threads, TRUE, INFINITE);

    CloseHandle(threads[0]);
    CloseHandle(threads[1]);

    system(&quot;pause&quot;);
    return 0;
}

unsigned __stdcall RunThreadA(void *params)
{
    do  {
	f++;
	cout &lt;&lt; &quot;,&quot;;
	}
    while(f !=100);

    return 1;
}

unsigned __stdcall RunThreadB(void *params)
{
    do  {
	f++;
	cout &lt;&lt; &quot;.&quot;;
	}
    while(f !=100);
	localeSet = TRUE;

    return 1;
}
</code></pre>
<p>Mein Ziel ist es 100 Zeichen in der Reihenfolge ,.,.,.,.,.,.,.,., usw. in der ausgabe zu haben aber das Programm gibt mir ledigtlich ...,,...,,,,,,,... usw. aus.<br />
Ich habe es schon mit Mutex versucht aber dort war das ergebnis ähnlich.<br />
Jetzt wurde mit gesagt es sollte mit &quot;CAS&quot; klappen aber aus dem was mir die VS03 Hilfe gibt werde ich net wirklich schlau...</p>
<p>Wie schaffe ich es das die Threads Paralel arbeiten ohne sich zu überschreiben ?</p>
<p>Gruß<br />
Kaitos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685617</guid><dc:creator><![CDATA[Kaitos]]></dc:creator><pubDate>Wed, 25 Mar 2009 10:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 10:22:45 GMT]]></title><description><![CDATA[<p>Kaitos schrieb:</p>
<blockquote>
<p>Ich über mich gerade in der Programmierung mit Threads.<br />
Mein Ziel ist es die Threads parallel arbeiten zu lassen...</p>
<p>...Wie schaffe ich es das die Threads Paralel arbeiten ohne sich zu überschreiben ?</p>
</blockquote>
<p>1. Ich will dir nicht zu nahe drehten, aber wiedersprichst du dir jetzt nicht? Sollen die Threads nun parallel oder sequenziell ablaufen, wenn du letzteres willst, nimmt man eigentlich keine Threads dafür.</p>
<p>2. Es wäre schön wenn du einen lauffähigen Code anzeigst, ist ja schön, das die Includes in der stdafx.h liegen, im Forum wäre es aber besser wenn du diese direkt reinschreibst. Auch weil du vermutlich das falsche Forum gewählt hast: Du verwendest die WinAPI-Threads, oder? (Wenn du statt dessen die Boost-Threads verwenden würdest, die wohl auch denen aus dem nächsten C++ Standard ähneln, wärst du hier wohl richtig).</p>
<p>3. Wenn beide Threads auf eine gemeinsame Ressource (hier z.B. &quot;int f&quot;) zugreifen, so ist diese zu schützen (Thema Mutex/Critical Section...). Es sei den du Führst wirklich &quot;atomare&quot; Operationen durch (f++ ist das mit Sicherheit nicht, und selbst ++f würde ich hier nicht vertrauen).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685638</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 25 Mar 2009 10:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 10:40:33 GMT]]></title><description><![CDATA[<p>unter windoose gibts, um von mehreren threads auf eine gemeinsame variable zuzugreifen, die 'InterlockedXXX'-funktionen.<br />
beispiel:</p>
<pre><code>unsigned __stdcall RunThreadA(void *params)
{
    unsigned local_copy;
    do  
    {
      local_copy = InterlockedIncrement (&amp;f);  // hochzählen
      putchar (',');
    }
    while(local_copy &lt; 100);

    return 1;
}
</code></pre>
<p><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/1685646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685646</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 25 Mar 2009 10:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 10:48:22 GMT]]></title><description><![CDATA[<p>Kaitos schrieb:</p>
<blockquote>
<p>...</p>
<p>Mein Ziel ist es 100 Zeichen in der Reihenfolge ,.,.,.,.,.,.,.,., usw. in der ausgabe zu haben aber das Programm gibt mir ledigtlich ...,,...,,,,,,,... usw. aus.</p>
<p>...</p>
<p>Gruß<br />
Kaitos</p>
</blockquote>
<p>Wie asc schon geschrieben hat solltest du bei sequenziellen Abläufen keine Threads verwenden...</p>
<p>Ansonsten brauchst du für deine Übung zwei Mutexe die gegenseitig notifiziert werden.</p>
<pre><code>Main_Func
Create two threads
Create two mutex

Init Mutex for thread 1

Wait for threads

Thread 1
while f &lt; 100
Wait for mutex thread 1
output ','
set mutex thread 2
end while

Thread 2
while f &lt; 100
Wait for mutex thread 2
output '.'
set mutex thread 1
end while
</code></pre>
<p>Google Stichwörter:<br />
gegenseitiger Ausschluß<br />
Dekker Algorithmus<br />
Peterson Algorithmus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685649</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 25 Mar 2009 10:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 10:48:56 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Es sei den du Führst wirklich &quot;atomare&quot; Operationen durch (f++ ist das mit Sicherheit nicht, und selbst ++f würde ich hier nicht vertrauen).</p>
</blockquote>
<p>entweder du traust beiden, oder keinem davon. egal, wo sich das ++ befindet.<br />
<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/1685650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685650</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 25 Mar 2009 10:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 11:36:46 GMT]]></title><description><![CDATA[<p>Danke erstmal !</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a><br />
Ich will eine parallele Berechnung aber eine sequenzielle Ausgabe <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="🙄"
    /><br />
Naja es kommen nacher noch ein paar berechnungen dazu aber ich möcht das das Grundgerüst läuft.</p>
<p>includes habe ich jetzt im Code.</p>
<p>Die Variable 'f' ist nacher meine Globale variable und der rest bleibt intern in den Threads...</p>
<p>@+fricky<br />
Hört sich interessand an brauche ich irgendwelche zusätzlichen includes dafür ?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/34826">@Tobias</a> Gerg<br />
Danke ich schaue es mir an und sage bescheidwenn ich daran verzweifle / es klappt <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="😉"
    /></p>
<p>Danke der Peterson Algorithmus passt super in das was ich mir vorgestellt habe.<br />
(Aber wieso bin ich da nicht selbst drauf gekommen ? Schaut doch so einfach aus <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="😉"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685662</guid><dc:creator><![CDATA[Kaitos]]></dc:creator><pubDate>Wed, 25 Mar 2009 11:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 11:52:40 GMT]]></title><description><![CDATA[<p>Kaitos schrieb:</p>
<blockquote>
<p>@+fricky<br />
Hört sich interessand an brauche ich irgendwelche zusätzlichen includes dafür ?</p>
</blockquote>
<p>nix spezielles, #include &lt;windows.h&gt;, und gut.</p>
<p>Tobias: wieso 2 mutexe? unter win reicht einer (locken mit WaitForSingleObject und freigeben mit ReleaseMutex), bzw. noch besser: eine 'critical section', da mutexe eigentlich für prozessübergreifende synchronisation da sind (aber es funzt natürlich auch innerhalb eines prozesses).<br />
<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/1685677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685677</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 25 Mar 2009 11:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 12:23:40 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>...<br />
Tobias: wieso 2 mutexe? unter win reicht einer (locken mit WaitForSingleObject und freigeben mit ReleaseMutex), bzw. noch besser: eine 'critical section', da mutexe eigentlich für prozessübergreifende synchronisation da sind (aber es funzt natürlich auch innerhalb eines prozesses).<br />
<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>Wenn du wechselseitigen Ausschluß willst kannst du dass mit einem Mutex machen? Da steh ich auf dem Schlauch...</p>
<p>Wie stell ich mit einer Mutex sicher, dass der Switch zum zweiten Task erfolgt? Wird beim ReleaseMutex ?immer? ein Kontextwechsel ausgeführt?</p>
<p>Wenn ja ist es mir klar... Wenn nicht, kannst du bitte ein Beispiel geben?</p>
<p>Gruß<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685702</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 25 Mar 2009 12:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 12:24:29 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>...<br />
Tobias: wieso 2 mutexe? unter win reicht einer (locken mit WaitForSingleObject und freigeben mit ReleaseMutex), bzw. noch besser: eine 'critical section', da mutexe eigentlich für prozessübergreifende synchronisation da sind (aber es funzt natürlich auch innerhalb eines prozesses).<br />
<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>Wenn du wechselseitigen Ausschluß willst kannst du dass mit einem Mutex machen? Da steh ich auf dem Schlauch...</p>
<p>Wie stell ich mit einer Mutex sicher, dass der Switch zum zweiten Task erfolgt? Wird beim ReleaseMutex ?immer? ein Kontextwechsel ausgeführt?</p>
<p>Wenn ja ist es mir klar... Wenn nicht, kannst du bitte ein Beispiel geben?</p>
<p>Gruß<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685704</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 25 Mar 2009 12:24:29 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 12:26:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">unsigned __stdcall RunThreadA(void *params)
{
	do	
	{
	if(p == 0)				
		{
		f=f-1;
		cout &lt;&lt; &quot;,&quot;;
		p=1;
		Sleep(1);
		}
	}
	while(f !=0);
return 1;
}

unsigned __stdcall RunThreadB(void *params)
{
	do	
	{		
	if(p == 1)
		{
		f=f-1;
		cout &lt;&lt; &quot;.&quot;;
		p=0;
		Sleep(1);
		}
	}
	while(f !=0);
localeSet = TRUE;
return 1;
}
</code></pre>
<p><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="😃"
    /> Klappt aber wieso er das Sleep(1); habe will weis ich nicht ich weiß nur das es ohne das eine Endlosschleife hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685705</guid><dc:creator><![CDATA[Kaitos]]></dc:creator><pubDate>Wed, 25 Mar 2009 12:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 12:29:48 GMT]]></title><description><![CDATA[<p>Tobias Gerg schrieb:</p>
<blockquote>
<p>Wie stell ich mit einer Mutex sicher, dass der Switch zum zweiten Task erfolgt? Wird beim ReleaseMutex ?immer? ein Kontextwechsel ausgeführt?</p>
</blockquote>
<p>ja, wenn der andere task auf die freigabe des mutex wartet (wenn er z.b. in dem WaitForSingleObject-aufruf festhängt). hier: <a href="http://msdn.microsoft.com/en-us/library/ms686927.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms686927.aspx</a><br />
<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/1685707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685707</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 25 Mar 2009 12:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 12:35:41 GMT]]></title><description><![CDATA[<p>Ganz allgemein: wenn es nicht mit Mutexen klappt, dann klappt es auch nicht mit anderen Synchronisationsmethoden. Die Berechnung soll parallel sein und die ausgabe sequentiell? Dann behandle Berechnung und Ausgabe getrennt. Ansonsten hast du zwar 2 Threads, die aber ein Problem sequentiell loesen, da sie sich gegenseitig blockieren.</p>
<blockquote>
<p>da mutexe eigentlich für prozessübergreifende synchronisation da sind</p>
</blockquote>
<p>Aeh nein, auch wenn unter Windows vielleicht andere Methoden der Synchronisation zuerst empfohlen werden. Beispiel Posix threads. Ausserdem steht in deinem Link nicht drin, wie garantiert wird, dass die Threads immer abwechselnd Zugriff auf die gemeinsame Ressource bekommen, sondern nur dass jeweils einer Zugriff drauf hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685709</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 25 Mar 2009 12:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 12:36:15 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>...<br />
ja, wenn der andere task auf die freigabe des mutex wartet (wenn er z.b. in dem WaitForSingleObject-aufruf festhängt). hier: <a href="http://msdn.microsoft.com/en-us/library/ms686927.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms686927.aspx</a><br />
<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>Alles klar, dann genügt natürlich ein Mutex...</p>
<p>Danke für den Link. <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="👍"
    /></p>
<p>Gruß<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685712</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 25 Mar 2009 12:36:15 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 13:35:44 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>da mutexe eigentlich für prozessübergreifende synchronisation da sind</p>
</blockquote>
<p>Aeh nein, auch wenn unter Windows vielleicht andere Methoden der Synchronisation zuerst empfohlen werden.</p>
</blockquote>
<p>ich meinte ja auch die windows-mutexe. dass der OP windows benutzt, wissen wir doch längst.</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Beispiel Posix threads.</p>
</blockquote>
<p>posix? wie jetzt? wofür?</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Ausserdem steht in deinem Link nicht drin, wie garantiert wird, dass die Threads immer abwechselnd Zugriff auf die gemeinsame Ressource bekommen, sondern nur dass jeweils einer Zugriff drauf hat.</p>
</blockquote>
<p>richtig. abwechselnd wird es nur, wenn jeder der beiden threads rechtzeitig in den lock rauscht, während der andere drin ist. aber dass so'n synchroner wechsel doof ist, hast du ja auch schon bemerkt.<br />
btw, damit beide threads frei rennen und sich trotzdem unterhalten können, bietet sich eventuell ein 'lock-free' FIFO an: <a href="http://kobodeluxe.sourcearchive.com/documentation/0.5.1/sfifo_8c-source.html" rel="nofollow">http://kobodeluxe.sourcearchive.com/documentation/0.5.1/sfifo_8c-source.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685751</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Wed, 25 Mar 2009 13:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 13:46:09 GMT]]></title><description><![CDATA[<blockquote>
<p>richtig. abwechselnd wird es nur, wenn jeder der beiden threads rechtzeitig in den lock rauscht, während der andere drin ist. aber dass so'n synchroner wechsel doof ist, hast du ja auch schon bemerkt.</p>
</blockquote>
<p>Aber so wie der OP es beschrieben hat, sollte es doch abwechselnd sein ,.,.,.,. . Ausserdem ist abwechseln nicht zwingend doof, da dann Threads nicht verhungern koennen. Posix threads war ein Beispiel fuer eine Threadbibliothek, die Mutexe anbietet aber nicht per se fuer Interprozesskommunikation. Und bevor jemand mit look-free Datenstrukturen oder Algorithmen hantiert, sollte er erstmal ein Gefuehl fuer normale Synchronisationsmechanismen entwickeln. Selbst die, die sich damit wirklich auskennen, machen dabei Fehler (link grad net parat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685757</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 25 Mar 2009 13:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 13:54:22 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Ausserdem ist abwechseln nicht zwingend doof, da dann Threads nicht verhungern koennen.</p>
</blockquote>
<p>Doch, denn dann sind Threads nämlich die falsche Lösung.<br />
Ein Thread verhungert wenn er nicht dran kommt - nicht wenn er nicht dauernd dran ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685768</guid><dc:creator><![CDATA[Shade@work]]></dc:creator><pubDate>Wed, 25 Mar 2009 13:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 14:02:32 GMT]]></title><description><![CDATA[<p>Mit abwechselnd meine ich, abwechselnd Zugriff auf eine Variable, aber die Berechnungen schon parallel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685778</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 25 Mar 2009 14:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Wed, 25 Mar 2009 14:18:07 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Mit abwechselnd meine ich, abwechselnd Zugriff auf eine Variable, aber die Berechnungen schon parallel.</p>
</blockquote>
<p>Warum willst du parallele Berechnungen, wenn diese an einem Nadelöhr warten sollen? Dadurch wird deine parallele Berechnung effektiv wieder zu einer sequenziellen. Vermutlich wäre nach deiner Beschreibung dein &quot;paralleles&quot; Programm selbst auf einer Mehrprozessormaschine kaum schneller als ein sequenzielles Programm (vielleicht sogar langsamer).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685801</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 25 Mar 2009 14:18:07 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 12:32:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Warum willst du parallele Berechnungen, wenn diese an einem Nadelöhr warten sollen?</p>
</blockquote>
<p>Warum sollte es ein Nadeloehr sein? Wenn das Holen/Schreiben des Wertes kurze Zeit beansprucht und die Berechnung lange dauert? (jedesmal etwa gleich lang)</p>
<blockquote>
<p>Dadurch wird deine parallele Berechnung effektiv wieder zu einer sequenziellen.</p>
</blockquote>
<p>Nein, da keine Datenabhaengigkeit zwischen den Threads bestehen muss.</p>
<blockquote>
<p>Vermutlich wäre nach deiner Beschreibung dein &quot;paralleles&quot; Programm selbst auf einer Mehrprozessormaschine kaum schneller als ein sequenzielles Programm (vielleicht sogar langsamer).</p>
</blockquote>
<p>Unbegruendete Behauptung. Und warum sollte es auf Mehrkernsystemen langsamer sein als auf Einkernsystemen (gleiche Taktzahl etc vorausgesetzt)? Wieviel Erfahrung hast du mit Multi thread programming? Selbst Anwendungen auf Einkernsysteme koennen von mehreren Threads profitieren (anwendungsspezifisch).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686285</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Mar 2009 12:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 12:33:53 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Unbegruendete Behauptung. Wieviel Erfahrung hast du mit Multi thread programming? Selbst Anwendungen auf Einkernsysteme koennen von mehreren Threads profitieren (anwendungsspezifisch).</p>
</blockquote>
<p>Nicht wenn du wie du es vorschlägst künstliche sperren einbaust.</p>
<p>Das Problem bei diesem abwechslenden zugriff sind die standzeiten der threads. du hast standzeiten, egal wie du es implementierst. und das ist der design fehler.</p>
<p>lass die threads parallel laufen und synchronisieren den zugriff auf die zentrale variable korrekt und du hast ein viel besseres system. nur eben dass das ergebnis halt nicht ABABABABABA sondern AAABBAAABBBBBBBAABBAAAA ist...</p>
<p>wenn es wichtig ist dass ABABA raus kommt, dann macht man es über einen 3. thread der von der einen seite lauter A und von der anderen Seite lauter B bekommt und diese dann verschmilzt - nach dem gewünschten muster.</p>
<p>uU muss es auch kein thread sein sondern die datenstruktur kann das uU auch selber... jedenfalls ist ein erzwingen eines nacheinander ablaufens eines parallelen programms keine gute idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686289</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 26 Mar 2009 12:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 12:48:39 GMT]]></title><description><![CDATA[<blockquote>
<p>du hast standzeiten, egal wie du es implementierst.</p>
</blockquote>
<p>Das gebe ich zu.</p>
<blockquote>
<p>erzwingen eines nacheinander ablaufens eines parallelen programms keine gute idee.</p>
</blockquote>
<p>Das gebe ich auch zu. (irgendwelche Ausnahmen bestaetigen bestimmt diese Regel)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686300</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Mar 2009 12:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 12:54:33 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Wieviel Erfahrung hast du mit Multi thread programming? Selbst Anwendungen auf Einkernsysteme koennen von mehreren Threads profitieren (anwendungsspezifisch).</p>
</blockquote>
<p>Ich behaupte jetzt einfach mal frech: Ich habe deutlich mehr Grundlagenwissen über Multithreadprogrammierung wie du, auch wenn sich der Einsatz (bedingt durch Projektvorgaben) auf ein Minimum beschränkt.</p>
<p>Davon abgesehen kann ein Prozessor (wenn wir mal Techniken wie Hyperthreading außen vor lassen) nur maximal zu 100% ausgelastet werden, egal ob sequenziell oder parallel. Und das Umschalten zwischen Threads kostet auch Zeit. Was man auf einem Prozessor tatsächlich schaffen kann ist aber eine bessere Auslastung wenn ein Thread wegen irgendwas warten muss.</p>
<p>Multithreading hat auf Einzelprozessormaschinen vor allem seine Vorzüge, wenn bestimmte Aktionen durchgeführt werden können während andere z.B. auf Benutzereingaben oder DB-Rückmeldungen etc. warten.</p>
<p>Du wiederum verringerst jeglichen theoretischen Mehrwert den Threads haben, durch dein sequenzielles &quot;Nadelöhr&quot;. Je nach dem wie groß der Verwaltungsaufwand für die Synchronisation ist, kann dies den Nutzen überwiegen - oder zumindest stark reduzieren. Ich würde entweder die Berechnungen gänzlich trennen - und erst am Schluss die Daten zusammenführen - oder die Threads in einen verschmelzen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686308</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 26 Mar 2009 12:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 13:42:26 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Du wiederum verringerst jeglichen theoretischen Mehrwert den Threads haben, durch dein sequenzielles &quot;Nadelöhr&quot;. Je nach dem wie groß der Verwaltungsaufwand für die Synchronisation ist, kann dies den Nutzen überwiegen - oder zumindest stark reduzieren. Ich würde entweder die Berechnungen gänzlich trennen - und erst am Schluss die Daten zusammenführen - oder die Threads in einen verschmelzen.</p>
</blockquote>
<p>Ok, ich will dir deine Erfahrung nicht streitig machen, im nachhinein gesehen ist mein Satz ueberfluessig. Das Hauptproblem ist, dass Threads sehr anwendungsspeziell sind und hier natuerlich nur (mehr oder weniger) allgemein diskutiert werden kann. Es wichtig, Verwaltungskosten von Threads gegen den Berechnungsnutzen abzuwaegen, was aber sehr speziell ist. Sequentielle Anteile hat man immer. Die Frage ist meist, wohin diese legen ... Ein Nadeloehr muessen sie aber trotzdem nicht sein. Auch wie grob- oder feinkoernig parallelisiert werden kann/muss, ist Problem und Hardware abhaengig. Deswegen kann manchmal Strategie A besser sein als B. Aber es gibt Variante B und ist anderswo besser als A. Im Durchschnitt (ueber alle Probleme) hebt sich bestimmt keine Variante hervor.</p>
<p>PS: Jaja, alles allgemein und (fast) nichts sagend, aber ... ach keine Ahnung. Irgendwie gibt das konkrete Ausgangsproblem nicht mehr her.</p>
<blockquote>
<p>verringerst jeglichen theoretischen Mehrwert den Threads haben</p>
</blockquote>
<p>Linearer Speedup ist selten erreichbar. Irgendwo muss man immer Abstriche machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686339</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Mar 2009 13:42:26 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 14:34:19 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>wenn es wichtig ist dass ABABA raus kommt, dann macht man es über einen 3. thread der von der einen seite lauter A und von der anderen Seite lauter B bekommt und diese dann verschmilzt...</p>
</blockquote>
<p>damit kannste dich dann hier bewerben: <a href="http://thedailywtf.com/Default.aspx" rel="nofollow">http://thedailywtf.com/Default.aspx</a><br />
<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/1686382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686382</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Thu, 26 Mar 2009 14:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 14:44:37 GMT]]></title><description><![CDATA[<p>+fricky schrieb:</p>
<blockquote>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>wenn es wichtig ist dass ABABA raus kommt, dann macht man es über einen 3. thread der von der einen seite lauter A und von der anderen Seite lauter B bekommt und diese dann verschmilzt...</p>
</blockquote>
<p>damit kannste dich dann hier bewerben: <a href="http://thedailywtf.com/Default.aspx" rel="nofollow">http://thedailywtf.com/Default.aspx</a><br />
<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>Ist n ziemliches standard verfahren, wenn wir das &quot;verschmelzen&quot; als nachverarbeiten der daten betrachten.</p>
<p>bedenke dabei, dass bereits bei einem:</p>
<pre><code class="language-cpp">thread1.start();
thread2.start();

wait_for_threads_to_finish();

process_data();
</code></pre>
<p>dieses muster angewandt wird.</p>
<p>btw:<br />
ich dachte, du wolltest in fachforen nicht trollen...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686389</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 26 Mar 2009 14:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to CAS ? Threads zusammenarbeiten lassen. on Thu, 26 Mar 2009 15:10:34 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>ich dachte, du wolltest in fachforen nicht trollen...?</p>
</blockquote>
<p>das war kein trolling. seit der ersten antwort wissen wir schon, dass multithreading hier völlig unnötig ist.<br />
<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/1686399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686399</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Thu, 26 Mar 2009 15:10:34 GMT</pubDate></item></channel></rss>