<?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[mutex und lock_guard]]></title><description><![CDATA[<p>Hallo,<br />
gibts eigentlich einen technischen Grund, aus dem lock_guard keine Move-Konstruktoren hat und warum mutex keine member wie &quot;acquire&quot; und &quot;adopt&quot; hat?<br />
Ich fänd'</p>
<pre><code class="language-cpp">auto guard = mighty_mutex.acquire();
</code></pre>
<p>eigentlich viel schöner als</p>
<pre><code class="language-cpp">std::lock_guard&lt;std::mutex&gt; guard( mighty_mutex );
</code></pre>
<p>Da ich mir denke, dass es den Leuten, die das entwickelt haben auch so ginge, muss es ja einen Grund geben dafür, der würde mich interessieren. Unter &quot;mutex lock_guard cumbersome&quot; oder ähnlichen Suchanfragen habe ich leider nichts gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320970/mutex-und-lock_guard</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:07:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320970.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Oct 2013 21:44:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 21:44:17 GMT]]></title><description><![CDATA[<p>Hallo,<br />
gibts eigentlich einen technischen Grund, aus dem lock_guard keine Move-Konstruktoren hat und warum mutex keine member wie &quot;acquire&quot; und &quot;adopt&quot; hat?<br />
Ich fänd'</p>
<pre><code class="language-cpp">auto guard = mighty_mutex.acquire();
</code></pre>
<p>eigentlich viel schöner als</p>
<pre><code class="language-cpp">std::lock_guard&lt;std::mutex&gt; guard( mighty_mutex );
</code></pre>
<p>Da ich mir denke, dass es den Leuten, die das entwickelt haben auch so ginge, muss es ja einen Grund geben dafür, der würde mich interessieren. Unter &quot;mutex lock_guard cumbersome&quot; oder ähnlichen Suchanfragen habe ich leider nichts gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361283</guid><dc:creator><![CDATA[LuckyLocker]]></dc:creator><pubDate>Fri, 18 Oct 2013 21:44:17 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 21:52:57 GMT]]></title><description><![CDATA[<p>Was für einen Guard-Typen sollte dein acquire() denn returnen und warum genau diesen und keinen anderen? Schau dir mal std::unique_lock an... <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/2361287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361287</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 18 Oct 2013 21:52:57 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 21:57:09 GMT]]></title><description><![CDATA[<p>Ja, lock ist mir schon bekannt, ich habe es hier nur &quot;acquire&quot; benannt, damit man die andere Variante &quot;adopt&quot; benennen kann um das besser zu trennen und vor allem dem Benutzer nicht vorzuschreiben, dass er einen RAII guard benutzen muss.<br />
unique_lock hat doch dasselbe Problem, dass man immer den Typ des Mutex mit angeben muss? &quot;auto&quot; finde ich an dem Punkt schon schön. Darauf wollte ich ja eigentlich hinaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361288</guid><dc:creator><![CDATA[LuckyLocker]]></dc:creator><pubDate>Fri, 18 Oct 2013 21:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 21:59:53 GMT]]></title><description><![CDATA[<p>Geht ja recht einfach:</p>
<pre><code class="language-cpp">template &lt;typename M&gt;
std::unique_lock&lt;M&gt; acquire(M&amp; mutex)
{
  return std::unique_lock&lt;M&gt;(mutex);
}

auto guard = acquire( mighty_mutex );
</code></pre>
<p>Ich finde aber die explizite Typangabe gar nicht so schlecht. Weil der Namen ist völlig Wurst, die wichtige Information ist, dass es ein lock_guard ist (oft kommt eh nur ein Mutex in Frage).</p>
<p>Die acquire-Syntax betont das guard, das gefällt mir weniger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361289</guid><dc:creator><![CDATA[hdawer]]></dc:creator><pubDate>Fri, 18 Oct 2013 21:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 22:01:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;class Lockable&gt;
inline std::unique_lock&lt;Lockable&gt; acquire(Lockable&amp; lock)
{
  return std::unique_lock&lt;Lockable&gt;(lock);
}

// ...
auto guard = acquire(mighty_mutex);
</code></pre>
<p><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>
<p>Edit: <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="🙄"
    /> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361290</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 18 Oct 2013 22:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 22:11:03 GMT]]></title><description><![CDATA[<p>Na der Türsteher zieht doch den Perso auch direkt von mir ein, statt mich in eine Box zu schicken, die ihm dann meinen Perso aushändigt <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="😉"
    /><br />
Dieses acquire kann ich ja jetzt nicht in den std header packen, das heißt in jeder CU müsste ich wieder nen Header inkludisionieren oder das template neu definieren :((</p>
<p>Noch eine andere Frage:<br />
ist std::future&lt;void&gt; eine gangbare einfache Alternative für eine condition_variable, damit man nicht irgendwie noch eine geteilte Ressource mit einem Prädikat verwalten muss, zur Wappnung gegen &quot;spurious wakeups&quot;? Also in dem Falle, bei dem man auf ein Ereignis warten möchte und nicht sowieso schon ein &quot;geteiltes&quot; Prädikat zur Verfügung hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361292</guid><dc:creator><![CDATA[LuckyLocker]]></dc:creator><pubDate>Fri, 18 Oct 2013 22:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Fri, 18 Oct 2013 22:57:51 GMT]]></title><description><![CDATA[<p>Finde dass gut so. Mutexe sollte man eher sparsam nutzen, und meistens ist task-based parallelism die bessere Alternative.<br />
Lowlevel threading ist einfach zu fehleranfällig...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361297</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Fri, 18 Oct 2013 22:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Sat, 19 Oct 2013 08:41:53 GMT]]></title><description><![CDATA[<blockquote>
<p>Lowlevel threading ist einfach zu fehleranfällig</p>
</blockquote>
<p>Ist genauso wie new/delete. Die einen koennen es, die anderen nicht. Genauso wie mit Assembler, Python, gutes OOP, ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361314</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 19 Oct 2013 08:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Sat, 19 Oct 2013 10:26:37 GMT]]></title><description><![CDATA[<p>Hö? Versteh ich nicht?</p>
<p>Wieso fehleranfällig?</p>
<p>Entweder man nutzt Threads richtig und dann klappt das. Oder man nutzt sie falsch und schiesst sich mit Deadlocks oder Race Conditions so dermaßen ins eigene Bein, dass man auch gleich die Nebenläufigkeit sein lassen kann.</p>
<p>Achja, und wenn man es richtig nutzt und dann noch Ahnung hat und etwas Erfahrung, dann holt man richtig Performance raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361340</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 19 Oct 2013 10:26:37 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Sat, 19 Oct 2013 10:53:12 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Achja, und wenn man es richtig nutzt und dann noch Ahnung hat und etwas Erfahrung, dann holt man richtig Performance raus.</p>
</blockquote>
<p>Gerade bei Mutexen ist die Performance sehr oft nicht gegeben, auch wenn alles andere stimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361346</guid><dc:creator><![CDATA[ferpormance]]></dc:creator><pubDate>Sat, 19 Oct 2013 10:53:12 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Sat, 19 Oct 2013 15:25:16 GMT]]></title><description><![CDATA[<p>Die Sache mit Threading ist, dass es unheimlich viele Leute gibt die meinen es zu können, die aber in Wirklichkeit massiv viele Fehler machen.</p>
<p>Gerade Deadlocks und Race-Conditions sind so-gut-wie immer Timing-anhängig. D.h. man bekommt beim Testen keine Fehler, und meint alles wäre in Butter. Alles funktioniert wie es soll.<br />
Dabei haben die Programme schwerwiegende konzeptionelle Fehler, die dann meist nicht auf die Schnelle behoben werden können wenn die Bugs anfangen sich zu manifestieren.</p>
<p>z.B. Locks halten während man Callbacks macht/Events feuert ist ein Fehler den ich laufend sehe. Oder auch einfach gar keine Locks zu verwenden. Nach dem Motto &quot;mit Locks hat's Probleme gegeben, also machen wir die einfach weg&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361396</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 19 Oct 2013 15:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to mutex und lock_guard on Sat, 19 Oct 2013 15:44:18 GMT]]></title><description><![CDATA[<p>LuckyLocker schrieb:</p>
<blockquote>
<p>Da ich mir denke, dass es den Leuten, die das entwickelt haben auch so ginge, muss es ja einen Grund geben dafür, der würde mich interessieren. Unter &quot;mutex lock_guard cumbersome&quot; oder ähnlichen Suchanfragen habe ich leider nichts gefunden.</p>
</blockquote>
<p>Ich denke da gibt es mehrere Gründe.</p>
<ol>
<li>Man braucht manchmal direkt Zugriff auf die lock()/unlock() Funktionen, ohne &quot;Guard&quot;. Das heisst natürlich nicht dass man nicht zusätzlich ne Guard-Variante anbieten kann, aber es heisst dass es nicht die einzige Möglichkeit sein darf ne Mutex zu locken.</li>
<li>Zur Zeit wo diese Libraries entwickelt wurden gab's noch kein &quot;auto&quot;.</li>
<li>Zur Zeit wo diese Libraries entwickelt wurden gab's noch kein &quot;move&quot;.</li>
</ol>
<p>Ich finde die Variante <code>auto guard = lock(mutex);</code> auch viel eleganter.</p>
<p>LuckyLocker schrieb:</p>
<blockquote>
<p>Dieses acquire kann ich ja jetzt nicht in den std header packen, das heißt in jeder CU müsste ich wieder nen Header inkludisionieren oder das template neu definieren :((</p>
</blockquote>
<p>Du wirst bei jeder Sprache und jedem Framework Dinge finden die dir abgehen. Dafür schreibt man sich in jedem Projekt dann Hilfsfunktionen, die man dann an vielen Stellen verwendet.<br />
Das Argument &quot;ich müsste dann ja ne Header inkludieren&quot; ist für mich irgendwie ... lächerlich (sorry, nicht böse gemeint, aber ich kanns überhaupt nicht nachvollziehen).<br />
Ich meine, du musst ja auch Headers einbinden damit du überhaupt Mutexen verwenden kannst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Meine Projekte haben alle ein &quot;Common.h&quot;, wo Zeugs included/deklariert wird das an vielen Stellen des Projekts immer wieder gebraucht wird. Und jedes Header-File des Projekts bindet dann als erstes die &quot;Common.h&quot; ein.</p>
<blockquote>
<p>Noch eine andere Frage:<br />
ist std::future&lt;void&gt; eine gangbare einfache Alternative *snip*</p>
</blockquote>
<p>Ich verstehe die Frage nicht. Wenn du was hast, auf das <code>std::future&lt;void&gt;</code> perfekt passt, dann ja, klar, wieso solltest du dann nicht <code>std::future&lt;void&gt;</code> dafür verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361399</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 19 Oct 2013 15:44:18 GMT</pubDate></item></channel></rss>