<?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[Crash-Safe Multithreading?]]></title><description><![CDATA[<p>Hallo,<br />
das unterhaltsamste Problem der Woche ist: Ich muss eine Hardware-nahe Library als Interface verwenden. Es gibt weder den Quellcode, noch eine MD kompilierte Release-Version und sie crasht ungefähr alle 10 Minuten. Da die Library aus zwei C-Funktionen besteht, und so einfach zu bedienen ist, wie ein Staubsauger, überlege ich folgenden Ansatz:</p>
<p>Ich lagere die Calls der zweiten Library in einen externen Prozess aus, der über boost message_queue die Daten an meinen Hauptprozess schickt.</p>
<p>Meine Idee: Wenn der zweite Prozess crasht, startet das Hauptprogramm ihn neu.</p>
<p>Wie kann ich jetzt herausfinden, ob ein Thread gecrasht ist, oder muss ich das an den Daten, die er übermittelt, ausmachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301581/crash-safe-multithreading</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 14:06:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301581.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Mar 2012 11:38:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Crash-Safe Multithreading? on Fri, 30 Mar 2012 11:38:32 GMT]]></title><description><![CDATA[<p>Hallo,<br />
das unterhaltsamste Problem der Woche ist: Ich muss eine Hardware-nahe Library als Interface verwenden. Es gibt weder den Quellcode, noch eine MD kompilierte Release-Version und sie crasht ungefähr alle 10 Minuten. Da die Library aus zwei C-Funktionen besteht, und so einfach zu bedienen ist, wie ein Staubsauger, überlege ich folgenden Ansatz:</p>
<p>Ich lagere die Calls der zweiten Library in einen externen Prozess aus, der über boost message_queue die Daten an meinen Hauptprozess schickt.</p>
<p>Meine Idee: Wenn der zweite Prozess crasht, startet das Hauptprogramm ihn neu.</p>
<p>Wie kann ich jetzt herausfinden, ob ein Thread gecrasht ist, oder muss ich das an den Daten, die er übermittelt, ausmachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196948</guid><dc:creator><![CDATA[Hobo]]></dc:creator><pubDate>Fri, 30 Mar 2012 11:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Crash-Safe Multithreading? on Fri, 30 Mar 2012 12:11:45 GMT]]></title><description><![CDATA[<p>Hobo schrieb:</p>
<blockquote>
<p>Meine Idee: Wenn der zweite <strong>Prozess</strong> crasht, startet das Hauptprogramm ihn neu.</p>
<p>Wie kann ich jetzt herausfinden, ob ein <strong>Thread</strong> gecrasht ist,</p>
</blockquote>
<p>Was denn nun? Beim Prozess würd ichs an den Daten ausmachen: Ping das Ding immer wieder mal an, wenn er sich nicht meldet, sicherheitshalber killen und neu starten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196962</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 30 Mar 2012 12:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Crash-Safe Multithreading? on Wed, 11 Apr 2012 13:11:17 GMT]]></title><description><![CDATA[<p>Hey, danke für die Antwort. Ich habe das Problem erstmal über Boost-Interprocess gelöst, das heißt, sowohl die Daten als auch der Ping werden über shared_memory gespeichert.</p>
<p>Mein Ping ist zur Zeit so gebaut, dass Child-Process in seinem Infinite Main-Loop jedesmal time() aufruft, und die Variable in den Shared Memory speichert.</p>
<p>Wenn Host-Process bemerkt, dass die Variable länger nicht geupdated wurde, killt und resetted er Child-Process.</p>
<p>Problem ist: Wenn Child-Process startet, dauert es undefiniert lang bis zum ersten time() und wird manchmal infinit neugestartet. Abhilfe kann hier natürlich eine konstante Variable schaffen, z.B. dass die Überprüfung des Updates nach Child-Start erstmal zwei Sekunden ausgesetzt bleibt.</p>
<p>Je nach Prozessor-Geschwindigkeit kann das natürlich schief gehen (wenn der Rechner langsam ist und lange braucht).</p>
<p>Für interne Testzwecke reichts erstmal so.</p>
<p>Zuletzt fällt mir noch ein, Child-Prozess eine geteilte bool auf 1 setzen zu lassen, wenn er gestarted ist. Bevor die Variable true ist, kann Host ihn nicht kicken. Wenn Host ihn kickt, setzt er sie wieder auf false.</p>
<p>Gibts elegantere Wege?<br />
Lg..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200792</guid><dc:creator><![CDATA[Hobo]]></dc:creator><pubDate>Wed, 11 Apr 2012 13:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to Crash-Safe Multithreading? on Wed, 11 Apr 2012 14:39:44 GMT]]></title><description><![CDATA[<p>Hobo schrieb:</p>
<blockquote>
<p>Problem ist: Wenn Child-Process startet, dauert es undefiniert lang bis zum ersten time() und wird manchmal infinit neugestartet. Abhilfe kann hier natürlich eine konstante Variable schaffen, z.B. dass die Überprüfung des Updates nach Child-Start erstmal zwei Sekunden ausgesetzt bleibt.</p>
<p>[...]<br />
Zuletzt fällt mir noch ein, Child-Prozess eine geteilte bool auf 1 setzen zu lassen, wenn er gestarted ist. Bevor die Variable true ist, kann Host ihn nicht kicken. Wenn Host ihn kickt, setzt er sie wieder auf false.</p>
</blockquote>
<p>Die geteilte bool kann doch einfach der besagte Timestamp sein. Der Host setzt den Inhalt des Timestamp auf 0, und solange er 0 ist, weiß er, dass der Childprozess noch nicht aus den Puschen gekommen ist. Sobald was drinsteht wird abgeglichen und bei zu langer Wartezeit gekickt (und wieder null gesetzt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200826</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 11 Apr 2012 14:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to Crash-Safe Multithreading? on Thu, 12 Apr 2012 00:52:46 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht was das ganze jetzt mit Multithreading zu tun hat.<br />
Wenn die Library nicht mit Runtime X gebaut ist, dann muss das Programm eben auch Runtime X verwenden. Und wenn diese Runtime X nicht threadsafe ist, dann darf es in den Programm eben keine Threads geben.</p>
<p>Dein ausgelagerter Worker-Prozess dürfte dann also gar nicht mehr crashen.</p>
<p>Wenn er das doch tut, dann ist irgendwo der Hund drinnen. Dann ist die Variante mit Prozess killen + neu starten vielleicht ein &quot;netter&quot; Workaround, aber du wirst nie sicher sein können dass nicht doch irgendwann schlimme Dinge passieren. z.B. kein Crash aber falsche Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200993</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Apr 2012 00:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Crash-Safe Multithreading? on Thu, 12 Apr 2012 02:38:08 GMT]]></title><description><![CDATA[<p>Hobo schrieb:</p>
<blockquote>
<p>Hallo,<br />
das unterhaltsamste Problem der Woche ist: Ich muss eine Hardware-nahe Library als Interface verwenden. Es gibt weder den Quellcode, noch eine MD kompilierte Release-Version und sie crasht ungefähr alle 10 Minuten. Da die Library aus zwei C-Funktionen besteht, und so einfach zu bedienen ist, wie ein Staubsauger, überlege ich folgenden Ansatz:</p>
<p>Ich lagere die Calls der zweiten Library in einen externen Prozess aus, der über boost message_queue die Daten an meinen Hauptprozess schickt.</p>
<p>Meine Idee: Wenn der zweite Prozess crasht, startet das Hauptprogramm ihn neu.</p>
<p>Wie kann ich jetzt herausfinden, ob ein Thread gecrasht ist, oder muss ich das an den Daten, die er übermittelt, ausmachen?</p>
</blockquote>
<p>Wende dich besser an der Hersteller der Library, das der Crash gefixt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200999</guid><dc:creator><![CDATA[ähhhhh]]></dc:creator><pubDate>Thu, 12 Apr 2012 02:38:08 GMT</pubDate></item></channel></rss>