<?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[CriticalSection, blos wie richtig verwenden?]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe mehrere threads die auf die elemente in der Doc-Klasse zugreifen und will das mit einer CriticalSection koordinieren.<br />
Also habe ich ein CCriticalsection Objekt in der Doc-Klasse erstellt und rufe in jeder Funktion der Doc-Klasse am anfang Lock() und am Ende Unlock() auf.<br />
Ich dachte, meine Doc-Klasse sei nun &quot;threadsicher&quot;, bekomme aber Abstürze!</p>
<pre><code>class myprogDoc{
   ...
   CCriticalSection m_CS;
   ...
}
</code></pre>
<pre><code>void myprogDoc::test(){
    m_CS.Lock();

     ....//greife auf Daten zu

    m_CS.Unlock();
}
</code></pre>
<pre><code>UINT __cdecl theApp::ThreadFunc(LPVOID pParam){
    ....
    pDoc-&gt;test();
    ....
}
</code></pre>
<p>Wenn ich es so mache stürzt mein programm aber (bisher) nicht ab:</p>
<pre><code>void myprogDoc::Lock(){
   m_CS.Lock();
}
void myprogDoc::Unlock(){
   m_CS.Unlock();
}
</code></pre>
<pre><code>UINT __cdecl theApp::ThreadFunc(LPVOID pParam){
    ....
    pDoc-&gt;Lock();
    pDoc-&gt;test();
    pDoc-&gt;Unlock();
    ....
}
</code></pre>
<p>Ist denn die untere variante so richtig?<br />
Und warum klappt die erste nicht, bzw. warum kann ich die CS nicht in der funktion in der Doc-Klasse Locken und Unlocken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198291/criticalsection-blos-wie-richtig-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 07:14:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198291.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Nov 2007 13:34:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CriticalSection, blos wie richtig verwenden? on Tue, 20 Nov 2007 13:34:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe mehrere threads die auf die elemente in der Doc-Klasse zugreifen und will das mit einer CriticalSection koordinieren.<br />
Also habe ich ein CCriticalsection Objekt in der Doc-Klasse erstellt und rufe in jeder Funktion der Doc-Klasse am anfang Lock() und am Ende Unlock() auf.<br />
Ich dachte, meine Doc-Klasse sei nun &quot;threadsicher&quot;, bekomme aber Abstürze!</p>
<pre><code>class myprogDoc{
   ...
   CCriticalSection m_CS;
   ...
}
</code></pre>
<pre><code>void myprogDoc::test(){
    m_CS.Lock();

     ....//greife auf Daten zu

    m_CS.Unlock();
}
</code></pre>
<pre><code>UINT __cdecl theApp::ThreadFunc(LPVOID pParam){
    ....
    pDoc-&gt;test();
    ....
}
</code></pre>
<p>Wenn ich es so mache stürzt mein programm aber (bisher) nicht ab:</p>
<pre><code>void myprogDoc::Lock(){
   m_CS.Lock();
}
void myprogDoc::Unlock(){
   m_CS.Unlock();
}
</code></pre>
<pre><code>UINT __cdecl theApp::ThreadFunc(LPVOID pParam){
    ....
    pDoc-&gt;Lock();
    pDoc-&gt;test();
    pDoc-&gt;Unlock();
    ....
}
</code></pre>
<p>Ist denn die untere variante so richtig?<br />
Und warum klappt die erste nicht, bzw. warum kann ich die CS nicht in der funktion in der Doc-Klasse Locken und Unlocken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1406569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1406569</guid><dc:creator><![CDATA[baz]]></dc:creator><pubDate>Tue, 20 Nov 2007 13:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection, blos wie richtig verwenden? on Tue, 20 Nov 2007 13:44:21 GMT]]></title><description><![CDATA[<p>Ich verwende die CriticalSections normalerweise zusammen mit CSingleLock:</p>
<pre><code class="language-cpp">void myprogDoc::test()
{
  CSingleLock cLock(&amp;m_CS,TRUE);
  ... greife auf Daten zu
}
</code></pre>
<p>Ansonsten: Wie äußern sich denn die &quot;Abstürze&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1406579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1406579</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 20 Nov 2007 13:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection, blos wie richtig verwenden? on Wed, 21 Nov 2007 02:05:10 GMT]]></title><description><![CDATA[<p>Wenn das Lock/Unlock in myprogDoc::test nicht funktioniert hast du irgendwo anders ein Problem.<br />
Davon abgesehen würde ich auch zur Verwendung von CSingleLock raten - ist viel einfacher und exception-safe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407064</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 21 Nov 2007 02:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection, blos wie richtig verwenden? on Thu, 22 Nov 2007 07:45:14 GMT]]></title><description><![CDATA[<p>Ich würde das auch wie CStoll verwenden. Du kannst CSingleLock auch in einen eigenen Stackrahmen packen. Sobald die schließende Klammer durchlaufen wird, wird das CSingleLock-Object vernichtet und der Lock aufgehoben.</p>
<pre><code class="language-cpp">void myprogDoc::test()
{
   tue hier was
      {//ab hier ist Lock aktiv  
         CSingleLock cLock(&amp;m_CS,TRUE);
         ... greife auf Daten zu
      }//ab hier ist lock wieder weg
   tue hier noch was
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1407911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407911</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Thu, 22 Nov 2007 07:45:14 GMT</pubDate></item></channel></rss>