<?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[Multithreading locken]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe leider ein C++ Multithreading Problem. Prinzipiell ist der Projektaufbau folgender.</p>
<p>Es gibt eine PCI Karte die über 2 anzusteuernde Datenkanäle verfügt. In einer C++ DLL wird anhand einer einzigen Callback (für beide Kanäle) geprüft ob neue Nachrichten anliegen, falls ja wird unterschieden auf welchem Kanal die Nachricht denn jetzt gekommen ist und dementsprechend in einem Puffer für den jeweiligen Kanal gespeichert.</p>
<p>Von Außerhalb der DLL kann jetzt zu jedem beliebigen Zeitpunkt ein Zugriff auf diesen Puffer (mittels geeigneter Read-Funktion) geschehen.</p>
<p>Lange Rede - kurzer Sinn, ich möchte die Lese-Schreib-Zugriffe auf meine Zwischenpuffer der DLL gegenseitig sperren. Sprich entweder Lesen- oder Schreiben in einem Schwung ohne Unterbrechung - niemals aber beides &quot;irgendwie&quot; gleichzeitig.</p>
<p>In C# würde die Sache im einfachsten Fall so aussehen</p>
<p>lock (_lock) {<br />
// Operationen die eine Nachricht in den Puffer einfügen<br />
}</p>
<p>lock (_lock) {<br />
// Operationen die eine Nachricht aus dem Puffer entfernen<br />
}</p>
<p>Ich hoffe ihr wisst was ich meine und könnt mir einen kurzen Tipp geben.</p>
<p>Hintergrund ist der das ich befürchte das bei sehr hohen Datenraten (die leider gelegentlich erreicht werden) das Multithreading etwas durcheinander kommt.</p>
<p>Vielen Dank im Voraus<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260193/multithreading-locken</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 09:34:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260193.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Feb 2010 08:14:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading locken on Tue, 02 Feb 2010 08:14:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe leider ein C++ Multithreading Problem. Prinzipiell ist der Projektaufbau folgender.</p>
<p>Es gibt eine PCI Karte die über 2 anzusteuernde Datenkanäle verfügt. In einer C++ DLL wird anhand einer einzigen Callback (für beide Kanäle) geprüft ob neue Nachrichten anliegen, falls ja wird unterschieden auf welchem Kanal die Nachricht denn jetzt gekommen ist und dementsprechend in einem Puffer für den jeweiligen Kanal gespeichert.</p>
<p>Von Außerhalb der DLL kann jetzt zu jedem beliebigen Zeitpunkt ein Zugriff auf diesen Puffer (mittels geeigneter Read-Funktion) geschehen.</p>
<p>Lange Rede - kurzer Sinn, ich möchte die Lese-Schreib-Zugriffe auf meine Zwischenpuffer der DLL gegenseitig sperren. Sprich entweder Lesen- oder Schreiben in einem Schwung ohne Unterbrechung - niemals aber beides &quot;irgendwie&quot; gleichzeitig.</p>
<p>In C# würde die Sache im einfachsten Fall so aussehen</p>
<p>lock (_lock) {<br />
// Operationen die eine Nachricht in den Puffer einfügen<br />
}</p>
<p>lock (_lock) {<br />
// Operationen die eine Nachricht aus dem Puffer entfernen<br />
}</p>
<p>Ich hoffe ihr wisst was ich meine und könnt mir einen kurzen Tipp geben.</p>
<p>Hintergrund ist der das ich befürchte das bei sehr hohen Datenraten (die leider gelegentlich erreicht werden) das Multithreading etwas durcheinander kommt.</p>
<p>Vielen Dank im Voraus<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848988</guid><dc:creator><![CDATA[Defqon]]></dc:creator><pubDate>Tue, 02 Feb 2010 08:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading locken on Tue, 02 Feb 2010 08:28:51 GMT]]></title><description><![CDATA[<p>Sowas ist natürlich OS- abhängig.</p>
<p>Falls für Win32 gibts Locking Mechanism wie CriticalSection, Semaphoren, Mutex, etc. (hier findest Du die Doku: <a href="http://msdn.microsoft.com/en-us/library/ms686353(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms686353(VS.85).aspx</a>)<br />
Es ist ratsam einen Wrapper zu schreiben, der das freigeben automatisiert und auch garantiert.</p>
<p>Schon fertige Klassen (Wrapper) für verschiedene Betriebssysteme und mit einheitlichem Interface gibts z.B. bei Boost (<a href="http://www.boost.org/" rel="nofollow">http://www.boost.org/</a>).</p>
<p>Simon</p>
<p>Edit:<br />
- Link zu Boost hinzugefügt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848991</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 02 Feb 2010 08:28:51 GMT</pubDate></item></channel></rss>