<?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 notwendig?]]></title><description><![CDATA[<p>Hallo!</p>
<p>kann mir jemand helfen und sagen, ob hier ein Mutex erforderlich ist für eine multithreaded Anwendung?<br />
Verschiedene Threads rufen diese Funktion auf.</p>
<p>Ist es möglich, daß ich das mutex-ende hinunterziehen muß? Ist in der Kopierroutine irgendetwas nicht thread-sicheres?</p>
<p>Vielen Dank!</p>
<pre><code class="language-cpp">extern &quot;C&quot; void getStr(const char *ch_request_type, const char *ch_permissions, const char *ch_request,unsigned long request_len, char **ch_result, unsigned long *result_len, const char *user_name)
{
	std::string str_result;
	long result_length=0;

// mutex beginn
...
// mutex ende

	*result_len = str_result.length();
	(*ch_result) =new char[*result_len+1];
	memcpy ((*ch_result) , str_result.data(),*result_len);
	(*ch_result)[*result_len]=0;

	str_result.erase();
//mutex hier ende?
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/186633/mutex-notwendig</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 17:44:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186633.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Jul 2007 21:18:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mutex notwendig? on Tue, 10 Jul 2007 21:18:13 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>kann mir jemand helfen und sagen, ob hier ein Mutex erforderlich ist für eine multithreaded Anwendung?<br />
Verschiedene Threads rufen diese Funktion auf.</p>
<p>Ist es möglich, daß ich das mutex-ende hinunterziehen muß? Ist in der Kopierroutine irgendetwas nicht thread-sicheres?</p>
<p>Vielen Dank!</p>
<pre><code class="language-cpp">extern &quot;C&quot; void getStr(const char *ch_request_type, const char *ch_permissions, const char *ch_request,unsigned long request_len, char **ch_result, unsigned long *result_len, const char *user_name)
{
	std::string str_result;
	long result_length=0;

// mutex beginn
...
// mutex ende

	*result_len = str_result.length();
	(*ch_result) =new char[*result_len+1];
	memcpy ((*ch_result) , str_result.data(),*result_len);
	(*ch_result)[*result_len]=0;

	str_result.erase();
//mutex hier ende?
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1322657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322657</guid><dc:creator><![CDATA[joerider]]></dc:creator><pubDate>Tue, 10 Jul 2007 21:18:13 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex notwendig? on Tue, 10 Jul 2007 23:15:51 GMT]]></title><description><![CDATA[<p>Eieiei...</p>
<p>Der gezeigte Code ist in dem Sinne &quot;threadsafe&quot; (*) dass mehrere Threads gleichzeitig getStr aufrufen können, solange alle Threads dafür sorgen dass ...<br />
<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="😉"
    /> die übergebenen &quot;const&quot; Zeiger alle auf Daten Zeigen die während die Funktion läuft nicht von anderen Threads verändert werden können und<br />
<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="😉"
    /> die übergebenen &quot;nicht const&quot; Zeiger alle auf Daten Zeigen die während die Funktion läuft von anderen Threads weder verändert noch gelesen werden können</p>
<p>Das sind auch &quot;die üblichen Garantien&quot; die man von einem Aufrufer erwartet, sogesehen könnte man also sagen: ja, ist OK.</p>
<blockquote>
<p>Ist in der Kopierroutine irgendetwas nicht thread-sicheres?</p>
</blockquote>
<p>Ob eine/ein Funktion/Routine/Algorithmus &quot;threadsafe&quot; ist kann man grundsätzlich nur beurteilen wenn man weiss welche Daten gemeinsam genutzt werden, und welche Synchronisierungsmechanismen evtl. vorhandene andere Programmteile verwenden die auf die selben &quot;gemeinsam genutzten&quot; Daten zugreifen.</p>
<p>Wenn man davon ausgeht dass ein(e) Funktion/Routine/Algorithmus immer nur auf Daten zugreift die nicht gemeinsam genutzt werden ist sie/er immer &quot;threadsafe&quot;.</p>
<p>----</p>
<p>(*): Ansonsten... ob 'new', 'memcpy' und lokale Instanzen von std::string &quot;threadsafe&quot; sind kann dir nur die Doku der verwendeten Standard Library bzw. des Compilers sagen. 'new' ist z.B. oft NICHT threadsafe wenn man mit den falschen Optionen compiliert. 'memcpy' ist fast immer threadsafe, weil 'memcpy' normalerweise &quot;stateless&quot; ist, d.h. keine globalen oder statischen Variablen verwendet. Lokale Instanzen von std::string sind auch fast immer OK, es gibt allerdings AFAIK einige schräge Implementierungen wo das nicht so ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322685</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 Jul 2007 23:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex notwendig? on Wed, 11 Jul 2007 04:24:16 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn man davon ausgeht dass ein(e) Funktion/Routine/Algorithmus immer nur auf Daten zugreift die nicht gemeinsam genutzt werden ist sie/er immer &quot;threadsafe&quot;.</p>
</blockquote>
<p>Das heist aber auch, dass sie keine globalen/statischen Variablen verwendet. Nicht nur die übergebenen Parameter dürfen nicht gemeinstam genutzt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322703</guid><dc:creator><![CDATA[Hinweis]]></dc:creator><pubDate>Wed, 11 Jul 2007 04:24:16 GMT</pubDate></item><item><title><![CDATA[Reply to Mutex notwendig? on Wed, 11 Jul 2007 07:17:06 GMT]]></title><description><![CDATA[<p>Hinweis schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn man davon ausgeht dass ein(e) Funktion/Routine/Algorithmus immer nur auf Daten zugreift die nicht gemeinsam genutzt werden ist sie/er immer &quot;threadsafe&quot;.</p>
</blockquote>
<p>Das heist aber auch, dass sie keine globalen/statischen Variablen verwendet. Nicht nur die übergebenen Parameter dürfen nicht gemeinstam genutzt werden.</p>
</blockquote>
<p>Ja natürlich heisst es das auch, globale Variablen wären ja wohl &quot;gemeinsam genutzte Daten&quot; und schlagen sich damit mit der Vorderung oben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322781</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:17:06 GMT</pubDate></item></channel></rss>