<?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[Threads Parameter lesen ohne Syncronisation]]></title><description><![CDATA[<p>Nehmen wir an, ein thread schreib kontinuierlich einen wert in die membervariabel dtime:</p>
<pre><code class="language-cpp">class DATA{

double dtime;
public:

double GetTime(){

 //LOCK
 return dtime;
 //UNLOCK
}

};
</code></pre>
<p>Un ein anderer Thread liest ab und zu diesen wer mit GetTime().</p>
<p>Ist unbedingt notwendig das ich den wert sperre wenn ich lese? Auser das ein verrückter wert raus komemn kann beim lesen, kann es keinen absturz geben oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192944/threads-parameter-lesen-ohne-syncronisation</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 10:07:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192944.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Sep 2007 10:43:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 10:43:34 GMT]]></title><description><![CDATA[<p>Nehmen wir an, ein thread schreib kontinuierlich einen wert in die membervariabel dtime:</p>
<pre><code class="language-cpp">class DATA{

double dtime;
public:

double GetTime(){

 //LOCK
 return dtime;
 //UNLOCK
}

};
</code></pre>
<p>Un ein anderer Thread liest ab und zu diesen wer mit GetTime().</p>
<p>Ist unbedingt notwendig das ich den wert sperre wenn ich lese? Auser das ein verrückter wert raus komemn kann beim lesen, kann es keinen absturz geben oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369109</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 20 Sep 2007 10:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 11:07:50 GMT]]></title><description><![CDATA[<p>jo, es kann passieren, dass der eine thread falsche werte liest, wenn der andere gerade schreibt...</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/ms684122.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms684122.aspx</a> &lt;- könnte dich evtl. interessieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369132</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 11:14:20 GMT]]></title><description><![CDATA[<p>ja gut, wenn der wert falsch ist , ist mal egal, es geht darum ob das programm abstürzen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369144</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 11:25:19 GMT]]></title><description><![CDATA[<p>wenn das leben deines programms am richtigen wert dieser variable hängt, dann schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369166</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 11:31:05 GMT]]></title><description><![CDATA[<p>ne der wert wird gelesen und visualisiert, wenn der wert falsch oder daneben sist ,wird halt was falschen angezeigt... also nich lebensabhängig:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369178</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 11:33:08 GMT]]></title><description><![CDATA[<p>schau aber scheiße aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369180</guid><dc:creator><![CDATA[visualytiker]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:33:08 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 12:06:49 GMT]]></title><description><![CDATA[<p>Eigentlich dürfte der doch nicht mal einen falschen Wert annehmen, oder? Schließlich müsste die double-Variable ja mit einem Rutsch (einer Asm-Anweisung) beschrieben werden..? Oder wird die Thread-Ausführung auch manchmal mitten in einer Anweisung unterbrochen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369230</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 20 Sep 2007 12:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Thu, 20 Sep 2007 12:12:31 GMT]]></title><description><![CDATA[<p>eigentlich kann nicht während der abarbeitung eines befehles unterbrochen werden, daher sollte der zugriff auf das double eigentlich atomar sein.<br />
allerdings verstehe ich nicht, warum du dafür eine klasse benutzen willst. ein</p>
<pre><code class="language-cpp">extern const volatile double dtime;
</code></pre>
<p>an der stelle, an der du die zeit brauchst, wäre doch die sinnvollere variante für das speichern der zeit, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369236</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Thu, 20 Sep 2007 12:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Fri, 12 Sep 2008 05:53:27 GMT]]></title><description><![CDATA[<p>da ich ein ähnliches problem habe bzw. dazu was möchte, meine frage dazu:</p>
<p>ich habe mir testhalber 4 threads erzeugt die in einem skalaren datentyp (bool, int, char, float) gleichzeitig reinschreiben und lesen. ich bekomme dabei keinerlei abstürtze, etc.<br />
braucht man für skalare datentypen kein locking oder reicht es hier aus, wenn ich die varialbe als volatile behandle?<br />
es ist so, dass einen boolischen wert ständig durch einen thread abfrage und ein anderer thread ändert diesen wert ab und zu. nun stellt sich für mich die frage in wie weit, man sich verlassen kann, dass es hier zu keinem absturz kommt? ich möchte einfach verhindern, dass ich eine größere struktur in dem dieser bool drinnen ist, ständig locken muss.</p>
<p>danke für die auskunft und hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580570</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Fri, 12 Sep 2008 05:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Fri, 12 Sep 2008 06:24:00 GMT]]></title><description><![CDATA[<p>das wird eine lustige threading - volatile diskussion...<br />
simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580604</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Fri, 12 Sep 2008 06:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Fri, 12 Sep 2008 06:26:20 GMT]]></title><description><![CDATA[<p>simon.gysi schrieb:</p>
<blockquote>
<p>das wird eine lustige threading - volatile diskussion...<br />
simon</p>
</blockquote>
<p>danke für die wortspende, dein beitrag hilft mir sehr weiter <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="🙄"
    /> <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580607</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Fri, 12 Sep 2008 06:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Fri, 12 Sep 2008 08:15:14 GMT]]></title><description><![CDATA[<p>Ich bin jetzt kein ASM-Guru, aber ich bin mir recht sicher, dass das Kopieren eines 64Bit Floats nicht in einem Rutsch geschieht bei einer x86 (32Bit) Architektur.</p>
<p>Schau doch mal in die winapi, die haben ja für viele Sachen atomare Operationen, d.h. du musst dich nicht um das Locking kümmern, du ruftst einfach diese Methoden auf und die erledigen, dann die Arbeite ohne Unterbrechung, als ob diese Operation atomar wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580678</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Fri, 12 Sep 2008 08:15:14 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Fri, 12 Sep 2008 12:34:26 GMT]]></title><description><![CDATA[<p>ein zugriff auf ein double ist nicht so ohne weiteres atomar, der wert kann also kompletter schrott sein.<br />
und wenn man mit dem wert weiterrechnet könnte es auch sein dass irgendwo wegen des falschen wertes auf einmal ein signaling NAN rauskommt... je nach verwendeter plattform/CPU.</p>
<blockquote>
<p>braucht man für skalare datentypen kein locking oder reicht es hier aus, wenn ich die varialbe als volatile behandle?</p>
</blockquote>
<p>der standard garantiert hier nix, und solange man sich nicht auf eine plattform festlegt gibt es auch sonst keine garantien. d.h. du musst auch für typen wie char, short, int etc. locken. (ja, selbst char kann auf bestimmten plattformen probleme machen!)</p>
<p>volatile bringt auf bestimmten plattformen etwas, wenn diese ein bestimmten verhalten bezüglich volatile garantieren.</p>
<p>ganz allgemein kann man aber nichtmal bei einem volatile char davon ausgehen dass immer nur werte gelesen werden die auch irgendwann ein anderer programmteil so reingeschrieben hat. eine C++ implementierung dürfte z.B. ein char auf 2 CPU-worte aufteilen. der code um ein char zu schreiben würde dann 2 CPU werte lesen, anpassen, und wieder zurückschreiben. ein anderer thread könnte dann das char auslesen zu einem zeitpunkt wo ein CPU-wort schon auf einen neuen wert angepasst wurde, das 2. aber noch nicht.</p>
<p>----</p>
<p>@BorisDasTaschenmesser</p>
<p>wenn dein programm nicht gerade zig- bis hunderttausendmal pro sekunde auf den wert zugreift, dann mach es doch einfach mit locking. tut nicht weh. ehrlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580903</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 12 Sep 2008 12:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Fri, 12 Sep 2008 12:40:13 GMT]]></title><description><![CDATA[<p>Unter Windows könnten zudem die InterlockedXXX Funktionen benutzt werden.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580907</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Fri, 12 Sep 2008 12:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Parameter lesen ohne Syncronisation on Mon, 15 Sep 2008 05:31:57 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>ein zugriff auf ein double ist nicht so ohne weiteres atomar, der wert kann also kompletter schrott sein.<br />
und wenn man mit dem wert weiterrechnet könnte es auch sein dass irgendwo wegen des falschen wertes auf einmal ein signaling NAN rauskommt... je nach verwendeter plattform/CPU.</p>
<blockquote>
<p>braucht man für skalare datentypen kein locking oder reicht es hier aus, wenn ich die varialbe als volatile behandle?</p>
</blockquote>
<p>der standard garantiert hier nix, und solange man sich nicht auf eine plattform festlegt gibt es auch sonst keine garantien. d.h. du musst auch für typen wie char, short, int etc. locken. (ja, selbst char kann auf bestimmten plattformen probleme machen!)</p>
<p>volatile bringt auf bestimmten plattformen etwas, wenn diese ein bestimmten verhalten bezüglich volatile garantieren.</p>
<p>ganz allgemein kann man aber nichtmal bei einem volatile char davon ausgehen dass immer nur werte gelesen werden die auch irgendwann ein anderer programmteil so reingeschrieben hat. eine C++ implementierung dürfte z.B. ein char auf 2 CPU-worte aufteilen. der code um ein char zu schreiben würde dann 2 CPU werte lesen, anpassen, und wieder zurückschreiben. ein anderer thread könnte dann das char auslesen zu einem zeitpunkt wo ein CPU-wort schon auf einen neuen wert angepasst wurde, das 2. aber noch nicht.</p>
<p>----</p>
<p>@BorisDasTaschenmesser</p>
<p>wenn dein programm nicht gerade zig- bis hunderttausendmal pro sekunde auf den wert zugreift, dann mach es doch einfach mit locking. tut nicht weh. ehrlich.</p>
</blockquote>
<p>danke für die ausführliche erklärung!!! <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="👍"
    /><br />
habe das ganze nun mit einem locking gelöst.</p>
<p>simon.gysi schrieb:</p>
<blockquote>
<p>Unter Windows könnten zudem die InterlockedXXX Funktionen benutzt werden.Simon</p>
</blockquote>
<p>leider nicht möglich -&gt; linux.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581967</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 15 Sep 2008 05:31:57 GMT</pubDate></item></channel></rss>