<?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[threadsafe list]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>Ich möchte (zur Übung) eine threadsichere Liste (doppelt verkettet) implementieren. Allerdings scheint das STL-Interface dafür per Design nicht besonders gut geeignet zu sein, da Operationen auf Ranges schwierig zu locken sind, das geht vermutlich nur auf User-Seite. Ich suche eine Liste als Referenz, die für Multithreading designt wurde.</p>
<p>Habt ihr irgendwelche nützlichen Links für mich?</p>
<p>Grüße,<br />
Der Kellerautomat</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304640/threadsafe-list</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 21:42:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304640.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Jun 2012 10:12:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 10:12:59 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>Ich möchte (zur Übung) eine threadsichere Liste (doppelt verkettet) implementieren. Allerdings scheint das STL-Interface dafür per Design nicht besonders gut geeignet zu sein, da Operationen auf Ranges schwierig zu locken sind, das geht vermutlich nur auf User-Seite. Ich suche eine Liste als Referenz, die für Multithreading designt wurde.</p>
<p>Habt ihr irgendwelche nützlichen Links für mich?</p>
<p>Grüße,<br />
Der Kellerautomat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221948</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 11:44:10 GMT]]></title><description><![CDATA[<p>Bau dir eben einen Wrapper um std::list der auch noch ein Mutex enthält. Dann kannst du eben die List locken wenn du was damit tust und unlocken wenn du fertig bist. Eine doppelt verkettete Liste ist schwer lockfree hinzubekommen (wenn auch theoretisch möglich). Imo solltest du dir zuerst aber lieber mal überlegen, ob eine Liste wirklich eine gute Wahl für deine Datenstruktur ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221974</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 11 Jun 2012 11:44:10 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 11:17:41 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Bau dir eben einen Wrapper um std::list der auch noch ein Mutex enthält. Dann kannst du eben die List locken wenn du was damit tust und unlocken wenn du fertig bist.</p>
</blockquote>
<p>Das klingt aber doof, gleich die ganze Datenstruktur zu locken, wenn man ein einzelnes Element zugreift.</p>
<blockquote>
<p>Imo solltest du dir zuerst aber lieber mal überlegen, ob eine Liste wirklich eine gute Wahl für deine Datenstruktur ist...</p>
</blockquote>
<p>+1. Threadparallelisierung klingt nach Performanceprogrammierung. Verkettete Listen klingen nach, Verzeihung an alle Informatiker, Theoretikerquatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221977</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Jun 2012 11:17:41 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 11:48:31 GMT]]></title><description><![CDATA[<p>Naja, nehmen wir mal ein Simples Beispiel: Ein Server, der Clients in mehreren Threads bearbeitet. Irgendwo müssen die Clients ja auch in einer Liste gespeichert werden. Wie würde man sowas realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221983</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 11 Jun 2012 11:48:31 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 11:55:08 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Das klingt aber doof, gleich die ganze Datenstruktur zu locken, wenn man ein einzelnes Element zugreift.</p>
</blockquote>
<p>Bei Einfüge/Lösch-Operationen kommt er kaum drum herum, bzw. im Fall der std::list garnicht, weil hand-over-hand-Locking hier nicht umsetzbar ist. Wenn er nur auf bestehende Elemente zugreift könnte er einen etwas entspannteren Locking-Algorithmus verwenden, wobei er dann aber wieder für jedes Listenelement einen eigenen Mutex braucht.<br />
Listen sind generell ziemlich eklig, was das Locking angeht, weshalb man auch nur schwer was dazu im Netz findet.</p>
<blockquote>
<p>Imo solltest du dir zuerst aber lieber mal überlegen, ob eine Liste wirklich eine gute Wahl für deine Datenstruktur ist...</p>
</blockquote>
<p>+2. Wenn du überhaupt wirklich parallel drauf zugreifen musst, eignen sich für Container normalerweise eher random-access Datenstrukturen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221985</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 11 Jun 2012 11:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 12:15:14 GMT]]></title><description><![CDATA[<p>Es war einfach mein Bauchgefühl, das mir gesagt hat, dass Listen bei Multithreading am besten funktionieren, da Knoten unabhängig voneinander im Speicher liegen und es damit zu keinen Reallokationen wie bei einem dynamischen Array ala std::vector kommen kann.</p>
<p>Liege ich damit falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221988</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 11 Jun 2012 12:15:14 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 12:19:15 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Es war einfach mein Bauchgefühl, das mir gesagt hat, dass Listen bei Multithreading am besten funktionieren, da Knoten unabhängig voneinander im Speicher liegen und es damit zu keinen Reallokationen wie bei einem dynamischen Array ala std::vector kommen kann.</p>
<p>Liege ich damit falsch?</p>
</blockquote>
<p>Jein.<br />
Ein Knoten ist immer von seinen Nachbarknoten abhänig und das ist eigentlich schon der Kern des Problems:<br />
Wann ist ein Container Threadsafe?<br />
Oft ist ein brutales Locken wenn man auf den Container zugreift das simpelste. Denn einfügen und löschen wirkt sich immer auch auf andere Elemente aus. Will man nur lesezugriff haben, ists einfacher - aber irgendwann braucht man auch Schreibzugriff.<br />
Ein Read und Write Lock ist deshalb manchmal eine gute Idee. Aber im Prinzip geht es darum: Was will ich mit dem Container eigentlich machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221990</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 11 Jun 2012 12:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:25:18 GMT]]></title><description><![CDATA[<p>Einfach verkettete Listen können was bringen, da man die Lock-free implementieren kann.<br />
Bei doppelt verketteten Listen sehe ich gerade halbwegs finster.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222065</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:32:23 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Einfach verkettete Listen können was bringen, da man die Lock-free implementieren kann.</p>
</blockquote>
<p>Kann man, aber nicht mal eben zur Übung als Einsteiger in die ganze Parallel-Thematik.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222070</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:40:01 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Einfach verkettete Listen können was bringen, da man die Lock-free implementieren kann.</p>
</blockquote>
<p>Kann man, aber nicht mal eben zur Übung als Einsteiger in die ganze Parallel-Thematik.</p>
</blockquote>
<p>Ja, da haste auch wieder Recht <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>
<p>Zum Einstieg in die ganze Threading-Thematik wäre etwas mit klassischen Mutexen angesagt.<br />
z.B. eine Producer-Consumer-Queue.<br />
Also ne bounded FIFO mit threadsafe TryGet/TimedGet, TryPut/TimedPut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222075</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:42:59 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Bei doppelt verketteten Listen sehe ich gerade halbwegs finster.</p>
</blockquote>
<p>Es ist theoretisch möglich, aber imo nicht sehr praktikabel: <a href="http://www.cse.chalmers.se/~tsigas/papers/deques-dlls-jpdc.pdf" rel="nofollow">http://www.cse.chalmers.se/~tsigas/papers/deques-dlls-jpdc.pdf</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222078</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:44:54 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Kann man, aber nicht mal eben zur Übung als Einsteiger in die ganze Parallel-Thematik.</p>
</blockquote>
<p>Ich bin kein &quot;Einsteiger in die Parallel-Thematik&quot;. Ich habe ein ungefähres Verständnis von Threads, Locking-Mechanismen und Atomics.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222079</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:51:07 GMT]]></title><description><![CDATA[<p>Quasi mal 'n Buch druebergelesen .... aber alte Hasen mit viel Erfahrung haben Papers veroeffentlich, die falsch waren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222082</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:51:07 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 14:55:56 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Ich habe ein ungefähres Verständnis von Threads, Locking-Mechanismen und Atomics.</p>
</blockquote>
<p>Das wäre meine Definition von &quot;gerade eingestiegen&quot;. Zumindest klingt es nicht nach Erfahrung mit parallelen Datenstrukturen.</p>
<p>Statement von der Parallel2012: &quot;Es gibt vielleicht 20-30 Leute, die Lockfree Algorithmen fehlerfrei hinbekommen. Weltweit.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222085</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 11 Jun 2012 14:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 15:01:26 GMT]]></title><description><![CDATA[<p>Ich habe schon threadsichere Datenstrukturen über Mutexes implementiert. Aber keine Lock-freien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222087</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 11 Jun 2012 15:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 15:08:10 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Statement von der Parallel2012: &quot;Es gibt vielleicht 20-30 Leute, die Lockfree Algorithmen fehlerfrei hinbekommen. Weltweit.&quot;</p>
</blockquote>
<p>Sehr gut.<br />
Jetzt muss ich mir nimmer so doof vorkommen <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/2222091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222091</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Jun 2012 15:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Mon, 11 Jun 2012 23:34:06 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Bei doppelt verketteten Listen sehe ich gerade halbwegs finster.</p>
</blockquote>
<p>Es ist theoretisch möglich, aber imo nicht sehr praktikabel: <a href="http://www.cse.chalmers.se/~tsigas/papers/deques-dlls-jpdc.pdf" rel="nofollow">http://www.cse.chalmers.se/~tsigas/papers/deques-dlls-jpdc.pdf</a></p>
</blockquote>
<p>Bitte was?<br />
Ich hab mir das Paper ja nur kurz angekuckt, aber anstelle eines Mutexes verwenden wir ein Flag, das gesetzt wird und nun wird in einer Schleife immer wieder gekuckt, ob das Flag gesetzt ist, bis es dann einmal nicht gesetzt ist...</p>
<p>Was hat das mit lockfree zu tun?<br />
Jetzt ist man nicht an einer bestimmten Stelle gelockt, sondern läuft über sie immer wieder drüber, bis die Ressource verfügbar ist...<br />
Großer Unterschied...</p>
<p>Habe ich das richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222226</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 11 Jun 2012 23:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 00:37:03 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Was hat das mit lockfree zu tun?<br />
Jetzt ist man nicht an einer bestimmten Stelle gelockt, sondern läuft über sie immer wieder drüber, bis die Ressource verfügbar ist...<br />
Großer Unterschied...</p>
<p>Habe ich das richtig verstanden?</p>
</blockquote>
<p>Du zahlst keine Lock-Kosten und keine Context-Switches. Das <strong>ist</strong> Lockfree. Was haettest du erwartet? Dass magisch keine Race Conditions entstehen koennen?</p>
<p>Aber es gibt keinen Lock der eine Resource sperrt. Das ganze laeuft ueber CAS (Compare and Swap) welches sooft probiert die Aktion zu setzen bis sie nicht von einem anderen thread interruptet wird. Das ist in gewissermassen natuerlich ein Spinlock - aber eben nicht ganz.</p>
<p>Aber streng genommen stimmt es natuerlich: echtes lockfree gibt es nicht. Denn wir brauchen immer eine Art mit concurrenten Schreibzugriffen umgehen zu koennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222229</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 12 Jun 2012 00:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 01:41:22 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Bei doppelt verketteten Listen sehe ich gerade halbwegs finster.</p>
</blockquote>
<p>Es ist theoretisch möglich, aber imo nicht sehr praktikabel: <a href="http://www.cse.chalmers.se/~tsigas/papers/deques-dlls-jpdc.pdf" rel="nofollow">http://www.cse.chalmers.se/~tsigas/papers/deques-dlls-jpdc.pdf</a></p>
</blockquote>
<p>Bitte was?<br />
Ich hab mir das Paper ja nur kurz angekuckt, aber anstelle eines Mutexes verwenden wir ein Flag, das gesetzt wird und nun wird in einer Schleife immer wieder gekuckt, ob das Flag gesetzt ist, bis es dann einmal nicht gesetzt ist...</p>
<p>Was hat das mit lockfree zu tun?<br />
Jetzt ist man nicht an einer bestimmten Stelle gelockt, sondern läuft über sie immer wieder drüber, bis die Ressource verfügbar ist...<br />
Großer Unterschied...</p>
<p>Habe ich das richtig verstanden?</p>
</blockquote>
<p>Der Knackpunkt ist dass es kein Lock gibt das für die ganze Liste gilt.<br />
Diverse Retriy-Mechanismen wirst du in allen Lock-free Datenstrukturen finden. Ob's nun mit &quot;delete&quot; Flags ist oder mit Change-Countern oder noch anderen Verfahren, irgendwas muss immer sein. Selbst für einen atomaren Zähler braucht man auf Plattformen die nur CAS und kein FAA/... können Retries.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222233</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 12 Jun 2012 01:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 06:37:17 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Der Knackpunkt ist dass es kein Lock gibt das für die ganze Liste gilt.</p>
</blockquote>
<p>Dann kann ich doch aber auch mehrere Mutexe mit unterschiedlichen Aufgaben verwenden. Wo ist der Unterschied?</p>
<p>EDIT: Also meine naive Vorstellung eines Mutexes ist, dass er beim locken eine Schleife hat, die atomar kuckt, ob der Mutex gesperrt werden kann (und ggf. sperrt) und ansonsten ein yield aufruft. (Obwohl kann nicht ganz stimmen, da man sonst eine volle Prozessorauslastung hätte... Ist da ein Sleep mit drin?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222246</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 12 Jun 2012 06:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 07:48:28 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Statement von der Parallel2012: &quot;Es gibt vielleicht 20-30 Leute, die Lockfree Algorithmen fehlerfrei hinbekommen. Weltweit.&quot;</p>
</blockquote>
<p><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 />
Kann ich bestaetigen. Die Thematik ist wirklich alles andere als trivial. Wenns irgendwie geht, was fertiges nehmen. Wenn mans selber macht, hat man eh immer irgendwelche Bugs drinnen und dann debuggt man sich zu Tode (Multithreaded Anwendungen debuggen is die Hoelle!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222275</guid><dc:creator><![CDATA[SWDevDeb]]></dc:creator><pubDate>Tue, 12 Jun 2012 07:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 08:10:56 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Dann kann ich doch aber auch mehrere Mutexe mit unterschiedlichen Aufgaben verwenden. Wo ist der Unterschied?</p>
</blockquote>
<p>Der Unterschied ist iirc, dass Mutexe relativ Performance-intensiv sind, während das bei atomics nicht der Fall ist, vorausgesetzt, die Hardware unterstützt CAS.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222282</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 12 Jun 2012 08:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 10:12:25 GMT]]></title><description><![CDATA[<p>Man kann atomics nicht einfach mit Spin Locks vergleichen. Was eine Atomic Operation ausmacht ist, dass sie garantiert in einer gewissen Zeit fertig wird und es eben kein Lock gibt (kein busy wait, kein Contextswitch, nichts).<br />
Atomics sind auf Hardwareebene implementiert und nicht nur einfache &quot;Retry Mechanismen&quot;. Die Zugriffe werden direkt von der Hardware serialisiert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24036">@XSpille</a>: Deine naive Vorstellung von einem Mutex ist korrekt, genau so funktioniert das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222315</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 12 Jun 2012 10:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 10:30:12 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>(Obwohl kann nicht ganz stimmen, da man sonst eine volle Prozessorauslastung hätte... Ist da ein Sleep mit drin?</p>
</blockquote>
<p>Einen Mutex zu locken ist ähnlich wie das Ĺesen aus einer Datei.<br />
Beim Lesen aus einer Datei läuft der Thread direkt weiter, falls die Daten schon gepuffert waren, ansonsten ignoriert der Kernelscheduler den Thread bis alles von der Festplatte in den RAM geschrieben wurde.<br />
Beim Mutex ist es praktisch gleich, der Thread macht garnichts mehr, bis der Kernel weiß dass der Mutex frei ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222323</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 12 Jun 2012 10:30:12 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 13:06:04 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>XSpille schrieb:</p>
<blockquote>
<p>Dann kann ich doch aber auch mehrere Mutexe mit unterschiedlichen Aufgaben verwenden. Wo ist der Unterschied?</p>
</blockquote>
<p>Der Unterschied ist iirc, dass Mutexe relativ Performance-intensiv sind, während das bei atomics nicht der Fall ist, vorausgesetzt, die Hardware unterstützt CAS.</p>
</blockquote>
<p>Und warum ist ein Mutex nicht einfach ein atomic?<br />
Weil der Mutex zusätzlich dem Betriebssystem sagt, dass dieser Thread nicht mehr beachtet werden muss, bis der die Resource wieder verfügbar ist? Aber das müßte doch auch mit einem atomic-Flag möglich sein. Ok... Dann fliegt er im unglücklichen Fall mit warte auf Flag raus, obwohl das Flag schon wieder zurückgesetzt wurde da das Prozedere nicht atomic ist... Aber who cares?<br />
Warum kann man in einem Mutex kein einfaches Atomic verwenden?</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222371</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 12 Jun 2012 13:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to threadsafe list on Tue, 12 Jun 2012 13:09:14 GMT]]></title><description><![CDATA[<p>Mutexe sind doch über Atomics implementiert!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222373</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 12 Jun 2012 13:09:14 GMT</pubDate></item></channel></rss>