<?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[Frage an die Thread-Experten]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine etwas spezielle Frage an die Thread-Experten hier.</p>
<p>Folgende Fragestellung hätte ich gerne diskutiert:</p>
<p>Ich habe einen Tread A, der schreibt in zufälligen Abständen in eine globale Variable wert. Außerdem liest er sie auch gelegentlich aus, das dürfte aber egal sein.</p>
<p>Desweiteren habe ich einen Thread B, der in regelmäßigen Abständen (~20 mal pro Sekunde) diese globale Variable wert ausliest und dann mit dem ermittelten Inhalt von wert weiterarbeitet. Aber: dieser Thread schreibt nie etwas in wert, er liest immer nur.</p>
<p>Nun mein Problem: Kann ich davon ausgehen, das Thread B immer nur einen gültigen Inhalt aus wert liest, selbst wenn ich nicht CreateCriticalSection verwende? Dass also Thread B immer nur Inhalt bekommt, der tatsächlich einmal von Thread A hineingeschrieben wurde. Oder kann es sein, dass wenn Thread A beim hineinschreiben unterbrochen wird, Thread B nur Müll liest? Oder ist das hineinschreiben</p>
<pre><code class="language-cpp">wert=0;
</code></pre>
<p>ein Arbeitsgang, der nicht unterbrochen wird?</p>
<p>Hintergrund ist, dass ich an verschiedenen Stellen in Thread A wert verändere und deswegen ständig CriticalSections erschaffen und wieder einreissen müsste. Was, wenn es nicht notwendig wäre, überflüssig wäre ;).</p>
<p>Bin gespannt.<br />
Sebastian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/70192/frage-an-die-thread-experten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 06:55:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/70192.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Apr 2004 10:37:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 10:37:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine etwas spezielle Frage an die Thread-Experten hier.</p>
<p>Folgende Fragestellung hätte ich gerne diskutiert:</p>
<p>Ich habe einen Tread A, der schreibt in zufälligen Abständen in eine globale Variable wert. Außerdem liest er sie auch gelegentlich aus, das dürfte aber egal sein.</p>
<p>Desweiteren habe ich einen Thread B, der in regelmäßigen Abständen (~20 mal pro Sekunde) diese globale Variable wert ausliest und dann mit dem ermittelten Inhalt von wert weiterarbeitet. Aber: dieser Thread schreibt nie etwas in wert, er liest immer nur.</p>
<p>Nun mein Problem: Kann ich davon ausgehen, das Thread B immer nur einen gültigen Inhalt aus wert liest, selbst wenn ich nicht CreateCriticalSection verwende? Dass also Thread B immer nur Inhalt bekommt, der tatsächlich einmal von Thread A hineingeschrieben wurde. Oder kann es sein, dass wenn Thread A beim hineinschreiben unterbrochen wird, Thread B nur Müll liest? Oder ist das hineinschreiben</p>
<pre><code class="language-cpp">wert=0;
</code></pre>
<p>ein Arbeitsgang, der nicht unterbrochen wird?</p>
<p>Hintergrund ist, dass ich an verschiedenen Stellen in Thread A wert verändere und deswegen ständig CriticalSections erschaffen und wieder einreissen müsste. Was, wenn es nicht notwendig wäre, überflüssig wäre ;).</p>
<p>Bin gespannt.<br />
Sebastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495253</guid><dc:creator><![CDATA[C_Bastian]]></dc:creator><pubDate>Mon, 05 Apr 2004 10:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 10:41:47 GMT]]></title><description><![CDATA[<p>Ich habe vergessen:</p>
<p>wert ist vom Typ</p>
<pre><code class="language-cpp">unsigned char wert;
</code></pre>
<p>Sebastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495256</guid><dc:creator><![CDATA[C_Bastian]]></dc:creator><pubDate>Mon, 05 Apr 2004 10:41:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 12:29:39 GMT]]></title><description><![CDATA[<p>wenn thread B nur liest, ist der worst-case, dass dieser einen alten wert liesst, da dieser vielleicht noch nicht neu geschrieben wurde.</p>
<p>das schreiben der 0 in die variable wert ( sprich = speicheradresse ) geschieht mittels eines mov [xx], 0 - mit anderen worten, es ist mit einer instruction abgearbeitet ( etwaige ablagen in registern werden im fall eines thread-switch ohnehin gespeichert ). thread-switching innerhalb einer instruction ist wohl nicht zu erwarten.</p>
<p>btw - trotzdem sollte man zugriffe mehrerer thread auf eine variable synchronisieren. hierbei auftretende fehler sind damned hard to find.</p>
<p>rocknix ///</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495395</guid><dc:creator><![CDATA[RockNix]]></dc:creator><pubDate>Mon, 05 Apr 2004 12:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 12:34:46 GMT]]></title><description><![CDATA[<p>Deswegen frage ich ja hier nach und probiers nicht einfach aus. Wenn es 100 Stunden gut geht, aber dann einmal falsch liest ist blöd.</p>
<p>Zwei Fragen noch:<br />
1.) Ginge es auch noch mit int statt char?<br />
und, der vollständigkeit halber:<br />
2.) Wenn ich nicht null zuweise, sondern z.B. 114 bleibt es bei einer Maschinenanweisung (mov [xx], 114)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495403</guid><dc:creator><![CDATA[C_Bastian]]></dc:creator><pubDate>Mon, 05 Apr 2004 12:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 12:37:28 GMT]]></title><description><![CDATA[<p>naja ein einfaches SuspendThread und am Ende wieder ResumeThread sollte dein problem doch relativ einfach lösen und du braucht dir keine sorge darum machen welche deiner anweisungen atomar sind</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495408</guid><dc:creator><![CDATA[Windalf]]></dc:creator><pubDate>Mon, 05 Apr 2004 12:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 12:48:17 GMT]]></title><description><![CDATA[<p>C_Bastian schrieb:</p>
<blockquote>
<p>Deswegen frage ich ja hier nach und probiers nicht einfach aus. Wenn es 100 Stunden gut geht, aber dann einmal falsch liest ist blöd.</p>
<p>Zwei Fragen noch:<br />
1.) Ginge es auch noch mit int statt char?<br />
und, der vollständigkeit halber:<br />
2.) Wenn ich nicht null zuweise, sondern z.B. 114 bleibt es bei einer Maschinenanweisung (mov [xx], 114)?</p>
</blockquote>
<p>zu 1) die cpu macht in der regel sowieso nur 32 bit moves, falls du es nicht anders erzwingst. von daher ist es egal ob int oder char.</p>
<p>zu 2) ja, siehe 1.</p>
<p>trotzdem solltest du synchen, dann bist du auf der sicheren seite. der teufel steckt immer im detail. und wenn deine anwendung nicht gerade realtime ist, spricht nicht gegen ein paar critical-section aufrufe.</p>
<p>rocknix ///</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495426</guid><dc:creator><![CDATA[RockNix]]></dc:creator><pubDate>Mon, 05 Apr 2004 12:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Thread-Experten on Mon, 05 Apr 2004 12:57:03 GMT]]></title><description><![CDATA[<p>Windalf schrieb:</p>
<blockquote>
<p>naja ein einfaches SuspendThread und am Ende wieder ResumeThread sollte dein problem doch relativ einfach lösen</p>
</blockquote>
<p>Genau das Gegenteil ist der Fall: Relativ einfach steckt man richtig tief in der .... SuspendThread ist äußerst gefährlich, damit wird sogar printf zum Abenteuer.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5751">@C_Bastian</a><br />
Verwende als Datentyp LONG. Mit diesem kannst Du einfachst mit den Interlocked-Funktionen synchronisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495444</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Mon, 05 Apr 2004 12:57:03 GMT</pubDate></item></channel></rss>