<?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[Threadsicherheit]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe da mal eine Frage. Ich habe eine DLL die detaillierte Fehlermeldungen<br />
in einen globalen Buffer schreibt (char array). In der DLL wird auf diesen Buffer sowohl lesend als auch schreibend zugegriffen(sprintf, strcpy).<br />
Jetzt könnte es da ja natürlich Probeleme geben, wenn diese DLL in einer Multithreading-Anwendung verwendet wird. Desshalb werde ich das Abfragen dieser Meldung mit &quot;GetLastErrMsg&quot; in einer Multithreading-Anwendung verbieten.<br />
Trotzdem werden dann aber mehrere Threads ihre Fehlermeldungen in diesen Buffer schreiben und manchmal den Inhalt des Buffers temporär zwischenspeicher (also lesender zugriff). Jetzt habe ich etwas angst, dass mir die DLL vielleicht abstürzt, wenn mehrere threads diesen Zugriff machen. Eigentlich meine ich dürft nichts passieren, sollte bloß unsinniger Text rauskommen wenn mehrere threads gleichzeitig schreiben. Nun aber meine Frage:<br />
Weiß von euch jemand, ob es da zur Laufzeit Probleme geben könnte?</p>
<p>Schreibend greife ich so zu: sprintf(ErrorMessage,&quot;Neuer Fehler&quot;)<br />
und lesend so: strcpy(temporärerSpeicher, ErrorMessage)</p>
<p>Gruß Tom</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207403/threadsicherheit</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 18:05:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207403.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Mar 2008 08:52:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 08:52:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe da mal eine Frage. Ich habe eine DLL die detaillierte Fehlermeldungen<br />
in einen globalen Buffer schreibt (char array). In der DLL wird auf diesen Buffer sowohl lesend als auch schreibend zugegriffen(sprintf, strcpy).<br />
Jetzt könnte es da ja natürlich Probeleme geben, wenn diese DLL in einer Multithreading-Anwendung verwendet wird. Desshalb werde ich das Abfragen dieser Meldung mit &quot;GetLastErrMsg&quot; in einer Multithreading-Anwendung verbieten.<br />
Trotzdem werden dann aber mehrere Threads ihre Fehlermeldungen in diesen Buffer schreiben und manchmal den Inhalt des Buffers temporär zwischenspeicher (also lesender zugriff). Jetzt habe ich etwas angst, dass mir die DLL vielleicht abstürzt, wenn mehrere threads diesen Zugriff machen. Eigentlich meine ich dürft nichts passieren, sollte bloß unsinniger Text rauskommen wenn mehrere threads gleichzeitig schreiben. Nun aber meine Frage:<br />
Weiß von euch jemand, ob es da zur Laufzeit Probleme geben könnte?</p>
<p>Schreibend greife ich so zu: sprintf(ErrorMessage,&quot;Neuer Fehler&quot;)<br />
und lesend so: strcpy(temporärerSpeicher, ErrorMessage)</p>
<p>Gruß Tom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469819</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Fri, 07 Mar 2008 08:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 09:06:00 GMT]]></title><description><![CDATA[<p>Warum sicherst du deine Dll ned ab ?</p>
<p>nen mutex bevor du in den puffer reinschreibst ... und aufloesen wenn wieder rauskommst ....<br />
und zusaetzlich natuerlich auch nen mutex vor die Quelle, sonst kann dir nen thread den fehler umstellen bevor du den wert komplett draussen hast, im unguenstigsten falle ....</p>
<p>dann sollt eigentlich nimmer viel passieren.</p>
<p>wenn du wegen der performance bedenken hasst ... bau ne mt dll und ne normale ohne mutexe. Mit intelligenten Mutex-Objecten kann man ueber compilerdirektiven die dinger vom compiler in nichts aufloesen lassen ...</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469830</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Fri, 07 Mar 2008 09:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 09:08:21 GMT]]></title><description><![CDATA[<p>Da Du mit C-Strings arbeitest und damit auf die terminierenden 0-Bytes angewiesen bist, kann das Verhalten durchaus undefinierter als &quot;nur Zeichenmüll&quot; sein.</p>
<p>Warum verriegelst Du die Schreib- und Lesezugriffe nicht einfach gegeneinander?</p>
<p>Besser als dieser Blindflug ist das doch auf jeden Fall, und eine einfache CriticalSection in der DLL - parallel zu Deinem Speicher - wird das Problem lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469833</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Fri, 07 Mar 2008 09:08:21 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 09:17:31 GMT]]></title><description><![CDATA[<p>Ich habe die DLL schon vollgepflastert mit CriticalSections, desshalb wollte ich das vermeiden. Aber selbst wenn ich das ganze absichere ist es für Multithreading ja immer noch ungeeignet. Beispiel:</p>
<p>Funktionsaufruf thread 1 (Fehler passiert)<br />
Thread wird unterbrochen<br />
Funktionsaufruf thraed 2 (Fehler passiert)<br />
Fehlerbehandlung thread 2<br />
....<br />
Fehlerbehandlung thread 1 (Hat jetzt den Fehler, den Thread 1 verursacht hat)</p>
<p>Und das kann ich ja nicht verhindern, das müsste der Anwender der DLL ja machen. Oder seh ich das falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469839</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Fri, 07 Mar 2008 09:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 09:33:09 GMT]]></title><description><![CDATA[<p>Du könntest die Messages auch per Thread abspeichern.<br />
(z.B. TLS benutzen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469851</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Fri, 07 Mar 2008 09:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 11:07:22 GMT]]></title><description><![CDATA[<p>So ist der Ablauf ja nicht. Angenommen, der interne Speicher ist über eine Criticalsection gesichert.</p>
<p>Dann sieht das so aus:</p>
<pre><code>Thread 1 Funktionsaufruf
critsection wird gelockt von Thread 1             Thread 2 Funktionsaufruf
einfügen der Daten in Speicher                    critsection wird angefordert
                                                  nicht verfügbar, Thread geht
                                                  in Wartezustand
critsection freigeben                             critsection wird gelockt
Funktionsaufruf Ende                              einfügen der Daten
                                                  critsection freigeben
                                                  Funktionsaufruf Ende
</code></pre>
<p>Bei solchen Fragen erscheint mir die Lektüre von</p>
<p><a href="https://duckduckgo.com/?q=isbn+3826609891&amp;cppnetbooks" rel="nofollow">Windows Multithreading mit C++ und C# | ISBN: 3826609891</a></p>
<p>angemessen, denn die Aussage &quot;alles mit CritSections vollgepflastertet&quot; klingt nicht vertrauenerweckend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469908</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Fri, 07 Mar 2008 11:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 11:07:54 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-2.html" rel="nofollow">Marc++us</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469910</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 07 Mar 2008 11:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 12:56:52 GMT]]></title><description><![CDATA[<p>der Ablauf war ja auch bei fehlender Synchronisation gemeint.<br />
Mit Threads kenn ich mich eigentlich schon etwas aus. Es halt aber nicht so einfach eine alte DLL die aus über 40.000 Zeilen C-Code besteht und bei der der globale Namensraum sehr leichtfertig genutzt wurde plötzlich Threadsicher zu machen <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/1470003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470003</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Fri, 07 Mar 2008 12:56:52 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 13:01:06 GMT]]></title><description><![CDATA[<blockquote>
<p>C-Code besteht und bei der der globale Namensraum</p>
</blockquote>
<p>C hat ja gar keine Namespaces... od. wenn Du so willst nur den globalen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470007</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Fri, 07 Mar 2008 13:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to Threadsicherheit on Fri, 07 Mar 2008 13:04:05 GMT]]></title><description><![CDATA[<p>ich sagte doch: &quot;globaler Namensraum&quot;. Es denke ich eine gängige Bezeichnung.<br />
Deine Idee mit TLS find ich aber super. Das kannte ich bisher noch nicht.<br />
Denke das löst das Problem.<br />
Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470009</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Fri, 07 Mar 2008 13:04:05 GMT</pubDate></item></channel></rss>