<?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[Thread mit Hauptthread synchronisieren]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte, dass wenn mein Hauptthread einen weiteren Thread startet der Hauptthread so lange wartet bis er eine Benachrichtigung des gestarteten Threads erhält (was nicht impiliziert, dass der neu gestartete Thread zu Ende ist). Wie mache ich das am besten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326977/thread-mit-hauptthread-synchronisieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 23:36:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326977.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jul 2014 12:36:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Thu, 17 Jul 2014 12:36:55 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte, dass wenn mein Hauptthread einen weiteren Thread startet der Hauptthread so lange wartet bis er eine Benachrichtigung des gestarteten Threads erhält (was nicht impiliziert, dass der neu gestartete Thread zu Ende ist). Wie mache ich das am besten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409107</guid><dc:creator><![CDATA[lllla]]></dc:creator><pubDate>Thu, 17 Jul 2014 12:36:55 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Thu, 17 Jul 2014 12:51:24 GMT]]></title><description><![CDATA[<p>Wenn du es was sauberer nach Logik trennst, kannst du eventuell ganz gut Futures (mit std::async) nutzen.</p>
<p>Was hast du denn vor?</p>
<p>@Tipp: Rechtschreibung, Grammatik und Zeichensetzung sind nicht nur eine Erfindung und Verschwörung der Regierung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409111</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 17 Jul 2014 12:51:24 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Thu, 17 Jul 2014 12:54:01 GMT]]></title><description><![CDATA[<p>Im Mainthread einen std::mutex locken, Thread starten, im Mainthread erneut den Mutex locken, im Thread den Mutex freigeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409113</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 17 Jul 2014 12:54:01 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Thu, 17 Jul 2014 22:45:09 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>Im Mainthread einen std::mutex locken, Thread starten, im Mainthread erneut den Mutex locken, im Thread den Mutex freigeben.</p>
</blockquote>
<p>Geht nicht.<br />
Mutexen sind normalerweise &quot;owned&quot;, können also nur in dem Thread freigegeben werden wo sie auch gelockt wurden. Versuche es anders zu machen Enden üblicherweise in einer Exception (oder auch <code>abort</code> , je nach Library -- was der C++ Standard vorschreibt, wenn überhaupt etwas, weiss ich nicht).</p>
<p>Wenn dann müsste man schon nen &quot;(unowned) binary semaphore&quot; verwenden.</p>
<p>Geht aber auch mit ner Mutex + Condition-Variable + State-Variable (initializing/initialized/initialization_failed). Ist etwas mehr Code, aber mMn. besser verständlich. Ich mag &quot;unowned&quot; Synchronization-Primitives nicht sonderlich - die fühlen sich zu unnatürlich an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409177</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 17 Jul 2014 22:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Fri, 18 Jul 2014 07:05:36 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Mutexen sind normalerweise &quot;owned&quot;, können also nur in dem Thread freigegeben werden wo sie auch gelockt wurden.</p>
</blockquote>
<p>Guter Punkt. Das ist etwas was ich nie verstanden habe. Soweit ich das sehe kostet es extra Aufwand um das durchzusetzen und ist einfach nur schlecht. Der pthread-Standard sagt das auch, aber die Implementationen halten sich üblicherweise nicht dran. thread.wakeup() gibt es nicht, promise und future sind nicht wiederverwendbar... std::condition_variable scheint wirklich der einzige Standardweg zu sein. Vielleicht kann man mit <a href="http://en.cppreference.com/w/cpp/thread/packaged_task/reset" rel="nofollow">std::packaged_task::reset</a> was bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409200</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 18 Jul 2014 07:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Fri, 18 Jul 2014 07:13:11 GMT]]></title><description><![CDATA[<p>Eine Condition wäre die Lösung. Also etwa im pseudocode:</p>
<pre><code>bool ready = false;
Condition cond;
Mutex mutex;
startThread
...
// main thread:
mutex.lock();
ready = true;
cond.signal();
mutex.unlock();

// sub thread:
mutex.lock();
while (!ready)
  cond.wait(mutex);
mutex.unlock();
// isch habe fertig
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2409201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409201</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 18 Jul 2014 07:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Fri, 18 Jul 2014 08:17:28 GMT]]></title><description><![CDATA[<p>was Du willst ist ein Semaphor</p>
<p>boost::interprocess hat das. Warum es das nicht im C++11 gibt ist mir schleierhaft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409208</guid><dc:creator><![CDATA[!Dijkstra]]></dc:creator><pubDate>Fri, 18 Jul 2014 08:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Fri, 18 Jul 2014 11:27:37 GMT]]></title><description><![CDATA[<p>lllla schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>ich möchte, dass wenn mein Hauptthread einen weiteren Thread startet der Hauptthread so lange wartet bis er eine Benachrichtigung des gestarteten Threads erhält (was nicht impiliziert, dass der neu gestartete Thread zu Ende ist). Wie mache ich das am besten?</p>
</blockquote>
<p>Hört sich für mich nach <a href="http://www.cplusplus.com/reference/future/promise/" rel="nofollow">std::promise</a> an. Das Beispiel was gegeben ist passt auch noch perfekt zu deinem Problem</p>
<p>EDIT:<br />
1. Für jede Benachrichtigung brauchst du (leider) ein neues promise objekt, da man std::promise nicht resetten kann. D.h. wenn du deinen Hauptthread immer wieder benachrichtigen musst eignet es sich nur bedingt.<br />
2. Wenn du Betriebssystemspezifisch arbeiten kannst, womöglich eleganter, insbesondere dann wenn der Hauptthread oft er benachrichtigt werden muss</p>
<p>floorball</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409229</guid><dc:creator><![CDATA[floorball]]></dc:creator><pubDate>Fri, 18 Jul 2014 11:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Thread mit Hauptthread synchronisieren on Fri, 18 Jul 2014 23:14:47 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Mutexen sind normalerweise &quot;owned&quot;, können also nur in dem Thread freigegeben werden wo sie auch gelockt wurden.</p>
</blockquote>
<p>Guter Punkt. Das ist etwas was ich nie verstanden habe. Soweit ich das sehe kostet es extra Aufwand um das durchzusetzen und ist einfach nur schlecht.</p>
</blockquote>
<p>Ja, kostet extra Aufwand es durchzusetzen, aber minimal.<br />
Und es ist nicht einfach nur schlecht sondern einfach nur gut. Es vermeidet Fehler.</p>
<p>Man kann Semaphore zwar für viele Dinge verwenden, aber die Lösungen die dabei rauskommen sind selten elegant oder einfach zu verstehen. Mutexe + Condition-Variablen sind viel einfacher zu behirnen und führen zu Code der viel &quot;natürlicher&quot; ausdrückt was man eigentlich machen möchte.</p>
<p>floorball schrieb:</p>
<blockquote>
<p>Hört sich für mich nach <a href="http://www.cplusplus.com/reference/future/promise/" rel="nofollow">std::promise</a> an. Das Beispiel was gegeben ist passt auch noch perfekt zu deinem Problem</p>
</blockquote>
<p>Das ist gut. An <code>std::promise</code> hatte ich gar nicht gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409344</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 18 Jul 2014 23:14:47 GMT</pubDate></item></channel></rss>