<?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[2 Threads im Gleichschritt laufen lassen]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>folgendes Problem quält mich zurzeit:<br />
Ich habe 2 Threads, die beide je 3, jeweils gleichwertige (aber nicht identische) Funktionen aufrufen (und das in einer Endlosschleife).<br />
Nun soll jedes &quot;Funktionenpaar&quot; quasigleichzeitig laufen. Dabei ist es egal, welcher mit seiner Funktion zuerst beginnt/fertig ist. Wichtig ist nur: Der nächste Schritt darf erst gemacht werden, wenn beide mit dem vorherigen Schritt fertig sind.<br />
Habe schon mit Mutex und Semaphoren hantiert, aber die Lösung will mir nicht gelingen.</p>
<p>Danke für jegliche Hilfe,<br />
Julian</p>
<p>P.S.: Die Plattform ist Windows (ab XP), Windows- und MFC-Boardmittel sind daher erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280298/2-threads-im-gleichschritt-laufen-lassen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 04:04:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280298.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Jan 2011 10:22:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 10:22:07 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>folgendes Problem quält mich zurzeit:<br />
Ich habe 2 Threads, die beide je 3, jeweils gleichwertige (aber nicht identische) Funktionen aufrufen (und das in einer Endlosschleife).<br />
Nun soll jedes &quot;Funktionenpaar&quot; quasigleichzeitig laufen. Dabei ist es egal, welcher mit seiner Funktion zuerst beginnt/fertig ist. Wichtig ist nur: Der nächste Schritt darf erst gemacht werden, wenn beide mit dem vorherigen Schritt fertig sind.<br />
Habe schon mit Mutex und Semaphoren hantiert, aber die Lösung will mir nicht gelingen.</p>
<p>Danke für jegliche Hilfe,<br />
Julian</p>
<p>P.S.: Die Plattform ist Windows (ab XP), Windows- und MFC-Boardmittel sind daher erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005976</guid><dc:creator><![CDATA[Marauder1986]]></dc:creator><pubDate>Thu, 13 Jan 2011 10:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 10:25:54 GMT]]></title><description><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_45_0/doc/html/thread/synchronization.html#thread.synchronization.barriers" rel="nofollow">http://www.boost.org/doc/libs/1_45_0/doc/html/thread/synchronization.html#thread.synchronization.barriers</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005978</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 13 Jan 2011 10:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 10:31:23 GMT]]></title><description><![CDATA[<p>Stichwort Barriere. Bei einer Barriere kannst Du n Funktionen anmelden. Am Barrierepunkt wird dann so lange gewartet, bis alle n angemeldeten Funktionen signalisiert haben, dass sie fertig sind. Erst dann geht es weiter.<br />
Mit dem Suchbegriff solltest Du weiter kommen. In der boost-Sammlung gibt es dafür übrigens bereits eine fertige Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005980</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 13 Jan 2011 10:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 10:48:21 GMT]]></title><description><![CDATA[<p>Moin nochmal,</p>
<p>danke für eure schnellen Antworten.<br />
Das waren genau die Stichworte, die mich in Google und hier im Forum nun ein gutes Stück weiter gebracht haben.<br />
Was die Boost Library angeht: Ich tue mich schwer damit, eine Library einzubauen nur wegen einer einzelnen Funktionalität. Aber das wurde ja anscheinend hier schon mal thematisiert (wen es spontan interessiert: <a href="http://www.c-plusplus.net/forum/249950" rel="nofollow">http://www.c-plusplus.net/forum/249950</a>).</p>
<p>Ich werde mich jetzt erstmal da dran hängen, und wenn es dann konkrete Probleme gibt, nochmal anklopfen...</p>
<p>Besten Dank,<br />
Julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005993</guid><dc:creator><![CDATA[Marauder1986]]></dc:creator><pubDate>Thu, 13 Jan 2011 10:48:21 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 13:02:38 GMT]]></title><description><![CDATA[<p>Ich nochmal <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="🙂"
    /><br />
Ich habe nun mal selbst eine einfache Barrier-Klasse gebaut, da ich nicht wegen einer Klasse die ganze Boost-Library verwenden wollte.<br />
Vieleicht mag sich den mal jemand angucken um auf mögliche Race-Conditions oder grobe Performanceprobleme hinzuweisen (meine eigenen Tests waren bis jetzt erfolgreich).<br />
Ansonsten gebe ich den Code einfach mal preis für alle, die auch danach suchen:</p>
<pre><code class="language-cpp">// Barrier.h
#pragma once

#include &lt;Windows.h&gt;

class CBarrier
{
public:
	CBarrier(int nCount);
	~CBarrier(void);

	void Wait();

private:
	int m_nCount;
	int m_nWaiting;
	int m_nProceeding;
	CRITICAL_SECTION m_zCritical;
	HANDLE m_hEventAllWaiting;
	HANDLE m_hEventAllProceeding;
};
</code></pre>
<pre><code class="language-cpp">// Barrier.cpp
#include &quot;Barrier.h&quot;

CBarrier::CBarrier(int nCount)
{
	InitializeCriticalSection(&amp;m_zCritical);
	m_hEventAllWaiting = CreateEvent(NULL, TRUE, FALSE, NULL);
	m_hEventAllProceeding = CreateEvent(NULL, TRUE, FALSE, NULL);
	m_nCount = nCount;
	m_nWaiting = 0;
	m_nProceeding = 0;
}

CBarrier::~CBarrier()
{
	DeleteCriticalSection(&amp;m_zCritical);
	CloseHandle(m_hEventAllWaiting);
	CloseHandle(m_hEventAllProceeding);
}

void CBarrier::Wait(void)
{
	// Wait for all threads to reach the barrier
	EnterCriticalSection(&amp;m_zCritical);
	m_nWaiting++;
	if (m_nWaiting &gt;= m_nCount)
	{
		// The last thread reached the barrier
		m_nProceeding = 0;
		ResetEvent(m_hEventAllProceeding);
		SetEvent(m_hEventAllWaiting);
	}
	LeaveCriticalSection(&amp;m_zCritical);	
	(void)WaitForSingleObject(m_hEventAllWaiting, INFINITE);

	// Wait for all threads to pass the barrier
	EnterCriticalSection(&amp;m_zCritical);
	m_nProceeding++;
	if (m_nProceeding &gt;= m_nCount)
	{
		// The last thread passed the barrier
		m_nWaiting = 0;
		ResetEvent(m_hEventAllWaiting);
		SetEvent(m_hEventAllProceeding);
	}
	LeaveCriticalSection(&amp;m_zCritical);	
	(void)WaitForSingleObject(m_hEventAllProceeding, INFINITE);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006057</guid><dc:creator><![CDATA[Marauder1986]]></dc:creator><pubDate>Thu, 13 Jan 2011 13:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 13:04:20 GMT]]></title><description><![CDATA[<p>Nicht plattformunabhängig, bäh.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006059</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 13 Jan 2011 13:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Threads im Gleichschritt laufen lassen on Thu, 13 Jan 2011 13:14:16 GMT]]></title><description><![CDATA[<p>Immer wieder erstaunlich, wie fix das hier mit den Antworten geht <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>314159265358979 schrieb:</p>
<blockquote>
<p>Nicht plattformunabhängig, bäh.</p>
</blockquote>
<p>Ja, stimmt. Aber zugegeben: Das war auch nicht Ziel meiner Implementierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006066</guid><dc:creator><![CDATA[Marauder1986]]></dc:creator><pubDate>Thu, 13 Jan 2011 13:14:16 GMT</pubDate></item></channel></rss>