<?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[MSVC 7.1 STL - Threadsafe?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich denk, der Betreff sagt schon alles.<br />
Und falls sie nicht threadsafe ist, würde es reichen, einfach jeden Container zu kapseln (Proxy-Pattern) und in der kapselnden Klasse einen Mutex einzubauen und den vor jeden Aufruf zu locken oder sollte ich gleich eine threadsafe STL verwenden? (welche ist denn threadsafe?)</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/58571/msvc-7-1-stl-threadsafe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 02 Jun 2026 20:53:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/58571.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Dec 2003 14:31:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Sun, 14 Dec 2003 14:31:33 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich denk, der Betreff sagt schon alles.<br />
Und falls sie nicht threadsafe ist, würde es reichen, einfach jeden Container zu kapseln (Proxy-Pattern) und in der kapselnden Klasse einen Mutex einzubauen und den vor jeden Aufruf zu locken oder sollte ich gleich eine threadsafe STL verwenden? (welche ist denn threadsafe?)</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/415716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/415716</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Sun, 14 Dec 2003 14:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Sun, 14 Dec 2003 14:59:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
1. die Frage passt wohl besser ins VC-Forum, da der C++ Standard nichts zum Thema Threads zu sagen hat.<br />
2. Die Container der STL können eigentlich nur auf Applikationsebene threadsicher gemacht werden. Du kannst nicht einfach jeden Methoden-Aufruf durch einen Mutex schützen und dann ist gut.<br />
Eine Thread-sichere STL-Implementation ist aber natürlich erstmal die Voraussetzung für fröhliches MT mit der STL. Locken musst du aber in 99% aller Fälle trotzdem noch (-&gt; geteilte Ressourcen)</p>
<p>Etwas Literatur:</p>
<p><a href="http://groups.google.de/groups?hl=de&amp;lr=&amp;ie=UTF-8&amp;threadm=fc2e0ade.0312130831.7838f871%40posting.google.com&amp;rnum=1&amp;prev=/groups%3Fq%3Dthread%2Bsafe%2Bstl%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26scoring%3Dd%26selm%3Dfc2e0ade.0312130831.7838f871%2540posting.google.com%26rnum%3D1" rel="nofollow">Hier</a></p>
<p><a href="http://groups.google.de/groups?hl=de&amp;lr=&amp;ie=UTF-8&amp;threadm=bgvh9q%24t96oq%241%40ID-147672.news.uni-berlin.de&amp;rnum=4&amp;prev=/groups%3Fq%3Dthread-safe%2Bstl%2Bgroup:comp.lang.c%252B%252B.moderated%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26group%3Dcomp.lang.c%252B%252B.moderated%26selm%3Dbgvh9q%2524t96oq%25241%2540ID-147672.news.uni-berlin.de%26rnum%3D4" rel="nofollow">Hier</a></p>
<p><a href="http://groups.google.de/groups?hl=de&amp;lr=&amp;ie=UTF-8&amp;threadm=fc2e0ade.0312130831.7838f871%40posting.google.com&amp;rnum=1&amp;prev=/groups%3Fq%3Dthread%2Bsafe%2Bstl%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26scoring%3Dd%26selm%3Dfc2e0ade.0312130831.7838f871%2540posting.google.com%26rnum%3D1" rel="nofollow">Hier</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/415735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/415735</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 14 Dec 2003 14:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Sun, 14 Dec 2003 17:04:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>1. OK, danke für's Verschieben.<br />
2. Warum nicht? Dann greift ja immer nur ein Thread gleichzeitig auf die Instanz zu...</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/415836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/415836</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Sun, 14 Dec 2003 17:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Sun, 14 Dec 2003 19:01:51 GMT]]></title><description><![CDATA[<p>Hallo,<br />
erstens wäre es *extrem* ineffizient, wenn jeder Aufruf gelockt werden würde (wozu eine Mutex locken, wenn z.B. nur ein Thread auf einen Container zugreift?). Zweitens kann ein locking auf Operationsebene nichts gegen Abhängigkeiten die sich über mehrere Aufrufe erstrecken tun.<br />
Simples Beispiel:</p>
<pre><code class="language-cpp">if (!cont.empty())
{
T o = cont.top();
cont.pop();
}
</code></pre>
<p>Diesen Code kannst du nicht ohne Locking auf Anwendungsebene MT-sicher machen. Prinzipiell könnte ein anderer Thread nach jeder Op den Container verändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/415933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/415933</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 14 Dec 2003 19:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Sun, 14 Dec 2003 20:31:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>stimmt, du hast recht.</p>
<p>Dann würde es aber ja reichen, für jeden Container auch einen Mutex zu instantiieren und den dann immer von Hand zu locken (darf man dann halt nie vergessen...).</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/415991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/415991</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Sun, 14 Dec 2003 20:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Sun, 14 Dec 2003 23:02:35 GMT]]></title><description><![CDATA[<p>ChrisM schrieb:</p>
<blockquote>
<p>Dann würde es aber ja reichen, für jeden Container auch einen Mutex zu instantiieren und den dann immer von Hand zu locken (darf man dann halt nie vergessen...).</p>
</blockquote>
<p>Nicht von Hand. Wir sind im neuen Millenium. C++ mit RAII statt good ol' C <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="🙂"
    /><br />
Sprich: Sowas wie ein scoped_lock (siehe boost::thread), scope_guard bzw. LockingPtr(siehe Artikel von A. Alexandrescu) oder eines der vielen anderen &quot;Executing Around&quot;-Patterns (siehe z.B. Kevlin Henney: <a href="http://www.two-sdg.demon.co.uk/curbralan/papers/europlop/ExecutingAroundSequences.pdf" rel="nofollow">Executing Around Sequences</a>) sind da besser geeignet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/416090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/416090</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 14 Dec 2003 23:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Mon, 15 Dec 2003 09:42:24 GMT]]></title><description><![CDATA[<p>Um das loggen deiner container wirst ned umhinkommen, das nimmt dir keine Threadsichere Lib ab ! die frage ist halt nur, was von deinem container ueberbleibt, wenn du nen gleichzeitig konkurrierenden zugriff ausversehen doch noch hast :p</p>
<p>Bei der MS Impl der STL weiss ich nur so viel, das es probleme mit dem MT gab, weil die COntainerklassen auf globale ausserhalb der stl klasse definierten variablen zugegriffen haben, und es so zu seiteneffekten kam ... was teilweisse zu nicht vorraussehbaren verhalten gefuehrt hat ....<br />
Laso die probleme traten nicht auf, wenn gleichzeitig auf den gleichen container zugegriffen wurde (ok, probleme gabs da auch, aber das hat jede impl <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="🙂"
    /> ) sondern wenn gleichzeitig auf unterschiedliche container des gleichen types zugegriffen wurde (nicht immer, aber immer oefter) und da auch nur in speziellen faellen ... War zumindest bei VS 6.0 so !</p>
<p>STLPort ist ne alternative, kann ich nur empfehlen ...</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/416219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/416219</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Mon, 15 Dec 2003 09:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Mon, 15 Dec 2003 14:06:10 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>OK, danke für eure Antworten! Wenn es nicht geht, melde ich mich nochmal <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>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/416510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/416510</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Mon, 15 Dec 2003 14:06:10 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Mon, 15 Dec 2003 17:40:53 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>so, ich hab jetzt wirklich alles probiert, aber ich kriege es einfach nicht hin, die Boost-Threadlibrary bei mir (MSVC .net 2003 Prof) mit Boost.Jam und den Kommandozeilentools meines Compilers zu builden. Ich weiß nicht, woran es liegt, aber ich kriege nur &quot;Nicht gefunden&quot;-Fehler von jam.exe (hab mir die neuste vorcompilierte Version von der SourceForge-Downloadpage von Boost heruntergeladen). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/416751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/416751</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Mon, 15 Dec 2003 17:40:53 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Tue, 16 Dec 2003 12:21:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>*push*</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/417384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/417384</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 16 Dec 2003 12:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Tue, 16 Dec 2003 16:17:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>OK, ich hab es jetzt geschafft, ich habe Boost meinem Projekt hinzugefügt (also nur Boost.Thread), den Boostincludeordner zu den Standard-Includeordnern meines Compilers (bzw. Präprozessor) und zur Multithreaded DLL-Laufzeitbibliothek gewechselt.</p>
<p>Er compiliert zwar, aber ich kriege einen riesigen Berg an Warnungen: (hier ein kleiner Ausschnit)</p>
<blockquote>
<p>...<br />
thread.cpp<br />
c:\boost\boost\thread\exceptions.hpp(29) : warning C4275: class 'std::logic_error' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::lock_error' verwendet<br />
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\stdexcept(14): Siehe Deklaration von 'std::logic_error'<br />
c:\boost\boost\thread\exceptions.hpp(28): Siehe Deklaration von 'boost::lock_error'<br />
c:\boost\boost\thread\exceptions.hpp(35) : warning C4275: class 'std::runtime_error' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::thread_resource_error' verwendet<br />
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\stdexcept(136): Siehe Deklaration von 'std::runtime_error'<br />
c:\boost\boost\thread\exceptions.hpp(34): Siehe Deklaration von 'boost::thread_resource_error'<br />
c:\boost\boost\thread\mutex.hpp(37) : warning C4275: class 'boost::noncopyable' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::mutex' verwendet<br />
c:\boost\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable'<br />
c:\boost\boost\thread\mutex.hpp(36): Siehe Deklaration von 'boost::mutex'<br />
c:\boost\boost\thread\mutex.hpp(75) : warning C4275: class 'boost::noncopyable' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::try_mutex' verwendet<br />
c:\boost\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable'<br />
c:\boost\boost\thread\mutex.hpp(74): Siehe Deklaration von 'boost::try_mutex'<br />
c:\boost\boost\thread\mutex.hpp(115) : warning C4275: class 'boost::noncopyable' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::timed_mutex' verwendet<br />
c:\boost\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable'<br />
c:\boost\boost\thread\mutex.hpp(114): Siehe Deklaration von 'boost::timed_mutex'<br />
c:\boost\boost\thread\thread.hpp(39) : warning C4275: class 'boost::noncopyable' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::thread' verwendet<br />
c:\boost\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable'<br />
c:\boost\boost\thread\thread.hpp(38): Siehe Deklaration von 'boost::thread'<br />
c:\boost\boost\thread\thread.hpp(68) : warning C4275: class 'boost::noncopyable' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::thread_group' verwendet<br />
c:\boost\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable'<br />
c:\boost\boost\thread\thread.hpp(67): Siehe Deklaration von 'boost::thread_group'<br />
c:\boost\boost\thread\thread.hpp(79) : warning C4251: 'boost::thread_group::m_threads': class 'std::list&lt;_Ty&gt;' erfordert eine DLL-Schnittstelle, die von Clients von class 'boost::thread_group' verwendet wird<br />
with<br />
[<br />
_Ty=boost::thread *<br />
]<br />
c:\boost\boost\thread\condition.hpp(38) : warning C4275: class 'boost::noncopyable' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'boost::detail::condition_impl' verwendet<br />
c:\boost\boost\noncopyable.hpp(22): Siehe Deklaration von 'boost::noncopyable'<br />
c:\boost\boost\thread\condition.hpp(37): Siehe Deklaration von 'boost::detail::condition_impl'<br />
d:\Daten\Programmieren\Projekte\Galactic Blast\Shared\Boost\thread.cpp(90) : warning C4273: 'boost::thread::thread': Inkonsistente DLL-Bindung.<br />
d:\Daten\Programmieren\Projekte\Galactic Blast\Shared\Boost\thread.cpp(106) : warning C4273: 'boost::thread::thread': Inkonsistente DLL-Bindung.<br />
d:\Daten\Programmieren\Projekte\Galactic Blast\Shared\Boost\thread.cpp(143) : warning C4273: 'boost::thread::~thread': Inkonsistente DLL-Bindung.<br />
...</p>
</blockquote>
<p>Woran könnte das liegen? (die Boostdateien sind gar nicht zu einem DLL-Projekt, sondern zu einer ganz normalen statischen Lib hinzugefügt worden)</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/417679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/417679</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 16 Dec 2003 16:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to MSVC 7.1 STL - Threadsafe? on Tue, 16 Dec 2003 16:36:12 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>*push*</p>
<p>mit dem Posting eben hat er den Thread gar nicht hochgeholt und danach war die Datenbank 5 Minuten down <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>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/417682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/417682</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 16 Dec 2003 16:36:12 GMT</pubDate></item></channel></rss>