<?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[Critical_Section]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab eine statische Klasse (nur statísche Methoden und Member). Diese möchte ich threadsafe mit Hilfe von Critical_Section gestalten. Allerdings weiß ich nicht genau wie ich die CS initialisieren soll. Die CS soll am besten auch eine statische Member der Klasse sein.</p>
<p>Sowas in der Richtung funktioniert ja nicht:</p>
<pre><code class="language-cpp">void Class::initCS()
{
    if (!m_isinit)
    {
        InitializeCriticalSection(&amp;m_cs);
        EnterCS(&amp;m_cs);
        m_isinit=true;
        LeaveCS(&amp;m_cs);
    }
}
</code></pre>
<p>Hat jemand eine Idee oder noch besser die Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83681/critical_section</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 14:23:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83681.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Aug 2004 14:28:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Critical_Section on Mon, 23 Aug 2004 14:28:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab eine statische Klasse (nur statísche Methoden und Member). Diese möchte ich threadsafe mit Hilfe von Critical_Section gestalten. Allerdings weiß ich nicht genau wie ich die CS initialisieren soll. Die CS soll am besten auch eine statische Member der Klasse sein.</p>
<p>Sowas in der Richtung funktioniert ja nicht:</p>
<pre><code class="language-cpp">void Class::initCS()
{
    if (!m_isinit)
    {
        InitializeCriticalSection(&amp;m_cs);
        EnterCS(&amp;m_cs);
        m_isinit=true;
        LeaveCS(&amp;m_cs);
    }
}
</code></pre>
<p>Hat jemand eine Idee oder noch besser die Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589183</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Mon, 23 Aug 2004 14:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Mon, 23 Aug 2004 15:16:56 GMT]]></title><description><![CDATA[<p>Abgesehen davon, dass du eine race condition drin hast, wieso soll es nicht funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589235</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Mon, 23 Aug 2004 15:16:56 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Mon, 23 Aug 2004 15:38:48 GMT]]></title><description><![CDATA[<p>Es könnte ja passieren, dass m_cs zweimal initialisiert wird (falls ein Threadwechsel stattfindet, bevor EnterCS ausfgerufen wurde).</p>
<p>race condition?? was meinst du damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589255</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Mon, 23 Aug 2004 15:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Mon, 23 Aug 2004 21:07:38 GMT]]></title><description><![CDATA[<p>Genau das.</p>
<p>Du musst halt einfach nach dem EnterCS nochmal schauen, ob die Variable wirklich noch immer false ist. Nur dann machst du die Initialisierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589546</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Mon, 23 Aug 2004 21:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Tue, 24 Aug 2004 07:27:01 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Könntest du mir mal ein Beispiel liefern?<br />
Gibt es keine elegantere Möglichkeit statische Klassen threadsafe zu gestalten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589703</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Tue, 24 Aug 2004 07:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Tue, 24 Aug 2004 12:28:19 GMT]]></title><description><![CDATA[<p>*bitte*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589984</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Tue, 24 Aug 2004 12:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Tue, 24 Aug 2004 13:12:44 GMT]]></title><description><![CDATA[<p>mach das 'Initialize' besser woanders, also bevor die threads ausgeführt werden, die die cs benutzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590008</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 24 Aug 2004 13:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Tue, 24 Aug 2004 13:14:27 GMT]]></title><description><![CDATA[<p>So kann's überhaupt nicht funktionieren, seh ich grad. Irgendein Synchronisationskonstrukt musst du auf jeden Fall initialisieren, <strong>bevor</strong> zwei oder mehr Threads im Spiel sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590009</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Tue, 24 Aug 2004 13:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Wed, 25 Aug 2004 08:59:44 GMT]]></title><description><![CDATA[<p>Liese sich dazu nicht <a href="http://msdn.microsoft.com/library/en-us/dllproc/base/interlockedcompareexchange.asp" rel="nofollow">InterlockedCompareExchange</a> verwenden?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/590572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590572</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 25 Aug 2004 08:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Wed, 25 Aug 2004 10:40:14 GMT]]></title><description><![CDATA[<p>Kannst du das mal genau erläutern? Vielleicht ein wenig Code?<br />
Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590722</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Wed, 25 Aug 2004 10:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Wed, 25 Aug 2004 12:09:48 GMT]]></title><description><![CDATA[<p>Ich habe damit auch keine praktische Erfahrung, hatte mir das aber irgendiwe so gedacht (ungetestet):</p>
<pre><code class="language-cpp">LONG m_isinit = 0;
if (!InterlockedCompareExchange(&amp;m_isinit,1,0)) {
	InitializeCriticalSection(&amp;m_cs);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/590795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590795</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 25 Aug 2004 12:09:48 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Wed, 25 Aug 2004 15:26:38 GMT]]></title><description><![CDATA[<p>Danke.</p>
<p>Aber so könnte sein, dass ein Thread die CS-Struktur nutzt ohne, dass diese initialisiert ist ...</p>
<p>Oh mann ... was ist nun die beste Lösung?<br />
Keiner mehr eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591017</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Wed, 25 Aug 2004 15:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Wed, 25 Aug 2004 17:41:34 GMT]]></title><description><![CDATA[<p>Wiseo denn das? Du machst einfach m_isinit und die CRITICAL_SECTION-Struktur static und führst dann den obenstehenden Code im Konstruktor aus - da sollte dann eigentlich nichts passieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/591138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591138</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 25 Aug 2004 17:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Wed, 25 Aug 2004 19:39:46 GMT]]></title><description><![CDATA[<p>du könntest eine statische critical section auch statisch initialisieren lassen:</p>
<p>static bool initialized = initialize();</p>
<p>static bool initialize()<br />
{<br />
InitializeCriciticalSection(&amp;section);<br />
return true;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591288</guid><dc:creator><![CDATA[0rp]]></dc:creator><pubDate>Wed, 25 Aug 2004 19:39:46 GMT</pubDate></item><item><title><![CDATA[Reply to Critical_Section on Thu, 26 Aug 2004 06:18:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1644">@flenders</a>: Doch meiner Meinung nach schon. Es ist nicht sicher.</p>
<p>@Orp: Danke, ich glaube auch, dass das die einzige Lösung ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591497</guid><dc:creator><![CDATA[Karlo2]]></dc:creator><pubDate>Thu, 26 Aug 2004 06:18:38 GMT</pubDate></item></channel></rss>