<?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[Kosten einer CriticalSection]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>da ich einen Bereich habe, den ich schützen muss, der aber sehr sehr oft durchlaufen wird, habe ich mir Gedanken über die Kosten einer CriticalSection gemacht, wenn sie NICHT kollidiert.</p>
<p>Das Testszeniaro habe ich in dem Fall unter Windows aufgebaut<br />
mit der klassischen CRITICAL_SECTION aus der Windows API.</p>
<p>Dann habe ich 1.000.000 mal Enter und Leave gespielt und die Zeit gemessen.</p>
<p>Herausgekommen ist ein Wert von<br />
<strong>75 ns</strong><br />
pro einem nicht-kollidierenden Durchlauf.</p>
<p>Da mein Bereich in der finalen Version der Applikation vermutlich ca. 10.000 bis 100.000 mal pro Sekunde durchlaufen wird, mache ich mir Sorgen, da mich das dann schlimmstenfalls einstellige Millisekunden nur für die CS kosten wird.</p>
<p>Meine Frage an euch:<br />
<strong>Gibt es Alternativen, um einen bestimmten Speicherbereich ( in meinem Fall nur ein Pointer ) etwas zeiteffizienter zu schützen? atomic evtl.?</strong></p>
<p>gruß Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334978/kosten-einer-criticalsection</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 23:53:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334978.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Oct 2015 05:45:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 05:45:32 GMT]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>da ich einen Bereich habe, den ich schützen muss, der aber sehr sehr oft durchlaufen wird, habe ich mir Gedanken über die Kosten einer CriticalSection gemacht, wenn sie NICHT kollidiert.</p>
<p>Das Testszeniaro habe ich in dem Fall unter Windows aufgebaut<br />
mit der klassischen CRITICAL_SECTION aus der Windows API.</p>
<p>Dann habe ich 1.000.000 mal Enter und Leave gespielt und die Zeit gemessen.</p>
<p>Herausgekommen ist ein Wert von<br />
<strong>75 ns</strong><br />
pro einem nicht-kollidierenden Durchlauf.</p>
<p>Da mein Bereich in der finalen Version der Applikation vermutlich ca. 10.000 bis 100.000 mal pro Sekunde durchlaufen wird, mache ich mir Sorgen, da mich das dann schlimmstenfalls einstellige Millisekunden nur für die CS kosten wird.</p>
<p>Meine Frage an euch:<br />
<strong>Gibt es Alternativen, um einen bestimmten Speicherbereich ( in meinem Fall nur ein Pointer ) etwas zeiteffizienter zu schützen? atomic evtl.?</strong></p>
<p>gruß Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472302</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 23 Oct 2015 05:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 07:31:28 GMT]]></title><description><![CDATA[<p>ne CRITICAL_SECTION ist die rudimentärste form des schutzes in windows, also die wo die wenigstens anforderungen umgesetzt wurden.<br />
d.h. das ding ist performance und nicht auf breite verwendung und komfort ausgelegt.</p>
<p>und da fast alle mechanismen in der art auf atomic operationen aufbauen (müssen) ... ists sehr wahrscheinlich das die CRITICAL_SECTION im Hintergrund eh nur nen Interface zu nem atomic int irgendwas ++ poll schleife ist ^^</p>
<p>Wenn es selber implementierst, ist auch wie du auf das &quot;freiwerden&quot; des atomics wartest, das eigentliche Problem, nicht der atomic ...</p>
<blockquote>
<p>10.000 bis 100.000 mal pro Sekunde</p>
</blockquote>
<p>ich denk mal der austausch der CS wird da recht wenig bringen im vergleich zu anderen Themen.<br />
Parralelität ? gleich direkt in assambler schreiben ?</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472313</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Fri, 23 Oct 2015 07:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 08:12:46 GMT]]></title><description><![CDATA[<p>Parallel fällt leider aus, weil die Komponente schon ein Teil einer Parallelisierung ist, die nicht noch weiter aufgedröselt werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472317</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 23 Oct 2015 08:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 08:40:50 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Parallel fällt leider aus, weil die Komponente schon ein Teil einer Parallelisierung ist, die nicht noch weiter aufgedröselt werden kann.</p>
</blockquote>
<p>Kannste zusammendröseln? Statt 1000000000 Objekte zu haben und jedes muss selber mutexten und Du gehst eh linear durch, vielleicht 1000000 Blöcke zu je 1000 Elementen und Du mutextest bloß Blöcke?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472320</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 23 Oct 2015 08:40:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 18:02:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6029">@It0101</a><br />
Ja, klar <code>atomic</code> . Wenns damit geht, und du ein lock/unlock Paar mit einem einzigen atomic-Zugriff ersetzen kannst, sollte das die Kosten etwa halbieren.<br />
Bzw. sind &quot;read acquire&quot; und &quot;store release&quot; auf Intel quasi gratis, könnte also u.U. noch wesentlich billiger werden, je nachdem was für Zugriffe du brauchst.</p>
<p>ps:<br />
75ns sind etwas viel. Bist du sicher dass du richtig gemessen hast? Bei meiner letzten Messung bin ich auf ca. 40+40 Cycles gekommen (lock+unlock), also eher so 20~25ns insgesamt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472339</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Oct 2015 18:02:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 17:30:26 GMT]]></title><description><![CDATA[<p>Etwas schneller als CS auf Windows könnten Slim Reader/Writer Locks sein. Wenn es aber eine triviale atomic-Implementierung gibt, ist die natürlich vorzuziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472373</guid><dc:creator><![CDATA[Jodocus]]></dc:creator><pubDate>Fri, 23 Oct 2015 17:30:26 GMT</pubDate></item><item><title><![CDATA[Reply to Kosten einer CriticalSection on Fri, 23 Oct 2015 18:18:06 GMT]]></title><description><![CDATA[<p>Ja, SRW Locks sind gut. <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 />
<code>boost::mutex</code> wäre auch eine Alternative - das letzte mal wie ich geguckt habe hat <code>boost::mutex</code> zumindest noch eigenen Code verwendet, der sich auch den Bookkeeping-Overhead von <code>CRITICAL_SECTION</code> s spart.</p>
<p><code>std::mutex</code> wäre auch OK, wobei da IIRC bei MSVC &quot;unnötiger&quot; Dispatching-Code dazwischen ist und beim Erstellen/Zerstören jeweils eine dynamische Allokation/Deallokation.<br />
(Weil std::mutex von MSVC halt je nach OS verschiedene Mutex Implementierungen verwendet - also bei älteren OS' halt ne CS und bei neueren IIRC auch die SRW Locks.)<br />
Der Unterschied dürfte allerdings minimal sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472379</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Oct 2015 18:18:06 GMT</pubDate></item></channel></rss>