<?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[thread_local laufzeitfehler unter Windows]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit einer thread_local Variable.<br />
Hier mal ein Minimalbeispiel, das zeigen soll was ich vorhabe:</p>
<pre><code>#ifndef TEST_H_
#define TEST_H_

class Test{

private:
	vector&lt;bool&gt; test_vector;

public:
	void foo();
	void startThread();
};

#endif /* TEST_H_ */
</code></pre>
<pre><code>#include &lt;iostream&gt;
//#include &lt;unistd.h&gt;
#include &lt;thread&gt;

#include &quot;Test.h&quot;

using namespace std;

void Test::startThread(){
	thread t1(&amp;Test::foo, this);
	thread t2(&amp;Test::foo, this);
	t1.join();
	t2.join();
}

void Test::foo(){
	thread_local vector&lt;bool&gt; test_vector  = this-&gt;test_vector;
	cout &lt;&lt; &quot;Hallo &quot; &lt;&lt; endl;
	for(auto item:test_vector){
		cout &lt;&lt; item;
	}
}

int main() {
	test_vector = {1,0,1};
	Test t;
	t.startThread();
	return 0;
}
</code></pre>
<p>Es geht darum Threads parallel zu starten, bei dem aber jeder Thread mehrere lokale Variablen braucht.<br />
Also speichere ich die Vektoren und Objekte mittels thread_local in lokalen Variablen ab.<br />
Unter Linux läuft das super so, allerdings stürzt mein Programm unter Windows, wenn eine thread_local Variable im Thread vorkommt, beim verlassen des Threads / beim Erreichen des joins() ab.<br />
MinGW ist alles die aktuellste x64-Bit version. C++11 ist gesetzt.</p>
<p>MfG</p>
<p>Targunitoth</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327399/thread_local-laufzeitfehler-unter-windows</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 07:12:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327399.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Aug 2014 14:04:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to thread_local laufzeitfehler unter Windows on Sat, 09 Aug 2014 14:04:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit einer thread_local Variable.<br />
Hier mal ein Minimalbeispiel, das zeigen soll was ich vorhabe:</p>
<pre><code>#ifndef TEST_H_
#define TEST_H_

class Test{

private:
	vector&lt;bool&gt; test_vector;

public:
	void foo();
	void startThread();
};

#endif /* TEST_H_ */
</code></pre>
<pre><code>#include &lt;iostream&gt;
//#include &lt;unistd.h&gt;
#include &lt;thread&gt;

#include &quot;Test.h&quot;

using namespace std;

void Test::startThread(){
	thread t1(&amp;Test::foo, this);
	thread t2(&amp;Test::foo, this);
	t1.join();
	t2.join();
}

void Test::foo(){
	thread_local vector&lt;bool&gt; test_vector  = this-&gt;test_vector;
	cout &lt;&lt; &quot;Hallo &quot; &lt;&lt; endl;
	for(auto item:test_vector){
		cout &lt;&lt; item;
	}
}

int main() {
	test_vector = {1,0,1};
	Test t;
	t.startThread();
	return 0;
}
</code></pre>
<p>Es geht darum Threads parallel zu starten, bei dem aber jeder Thread mehrere lokale Variablen braucht.<br />
Also speichere ich die Vektoren und Objekte mittels thread_local in lokalen Variablen ab.<br />
Unter Linux läuft das super so, allerdings stürzt mein Programm unter Windows, wenn eine thread_local Variable im Thread vorkommt, beim verlassen des Threads / beim Erreichen des joins() ab.<br />
MinGW ist alles die aktuellste x64-Bit version. C++11 ist gesetzt.</p>
<p>MfG</p>
<p>Targunitoth</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412691</guid><dc:creator><![CDATA[Targunitoth]]></dc:creator><pubDate>Sat, 09 Aug 2014 14:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to thread_local laufzeitfehler unter Windows on Sat, 09 Aug 2014 14:15:19 GMT]]></title><description><![CDATA[<p>AFAIK ist bei MinGW thread_local leider immer noch einfach ein Art #define für __thread.<br />
__thread ist eine GCC Extension, die thread local storage (tls) für triviale Typen bietet.<br />
Trivial deswegen, weil es ziemlichen Murks mit Typen mit Destruktoren gibt.<br />
-&gt; Du kannst std::vector nicht thread_local machen.<br />
Die einzige Lösung ist einen Pointer thread_local zu machen und manuell den am Anfang des Threads mit new zu setzen und am Ende zu löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412694</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 09 Aug 2014 14:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to thread_local laufzeitfehler unter Windows on Sat, 09 Aug 2014 15:01:35 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort, dann weiß ich Bescheid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412709</guid><dc:creator><![CDATA[Targunitoth]]></dc:creator><pubDate>Sat, 09 Aug 2014 15:01:35 GMT</pubDate></item></channel></rss>