<?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[OpenMP und Threadsicherheit im Code]]></title><description><![CDATA[<p>Hallo,</p>
<p>bin heute auf MCSTL gestoßen, eine STL Implementierung, welche Parallelität durch OpenMP umsetzt.<br />
Wir haben schon bestehen den Code (sehr viel sogar), und dieser ist nicht für OpenMP oder wirkliche Threadsicherheit ausgelegt.<br />
Mich interessiert jetzt vor allem, wie sich das mit den comparator klassen verhält, welche bei uns häufig so aussehen:</p>
<pre><code class="language-cpp">class CompA: public std::binary_function&lt;const ClassA*, const ClassA*, bool&gt;
    {
      public :
      virtual bool operator()( const ClassA* p1, const ClassA* p2 ) const 
      { 
        const Param &amp; a= p1-&gt;getParam(); 
        const Param &amp; b= p2-&gt;getParam(); 

        return a.getValue() &lt; b.getValue();
      }
    };
</code></pre>
<p>Kann solcher Code mit OpenMP Probleme machen?<br />
Gerade wenn Instanzen auch in mehreren Containern als Pointer liegen. (was nicht auszuschließen wäre).</p>
<p>Die Codebasis ist relativ groß, und nicht immer sofort durchschaubar. Mutexe oder ähnliches gibt es für Instanzen nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263787/openmp-und-threadsicherheit-im-code</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 12:03:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263787.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Mar 2010 15:17:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Fri, 26 Mar 2010 15:17:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bin heute auf MCSTL gestoßen, eine STL Implementierung, welche Parallelität durch OpenMP umsetzt.<br />
Wir haben schon bestehen den Code (sehr viel sogar), und dieser ist nicht für OpenMP oder wirkliche Threadsicherheit ausgelegt.<br />
Mich interessiert jetzt vor allem, wie sich das mit den comparator klassen verhält, welche bei uns häufig so aussehen:</p>
<pre><code class="language-cpp">class CompA: public std::binary_function&lt;const ClassA*, const ClassA*, bool&gt;
    {
      public :
      virtual bool operator()( const ClassA* p1, const ClassA* p2 ) const 
      { 
        const Param &amp; a= p1-&gt;getParam(); 
        const Param &amp; b= p2-&gt;getParam(); 

        return a.getValue() &lt; b.getValue();
      }
    };
</code></pre>
<p>Kann solcher Code mit OpenMP Probleme machen?<br />
Gerade wenn Instanzen auch in mehreren Containern als Pointer liegen. (was nicht auszuschließen wäre).</p>
<p>Die Codebasis ist relativ groß, und nicht immer sofort durchschaubar. Mutexe oder ähnliches gibt es für Instanzen nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874237</guid><dc:creator><![CDATA[OpenMP]]></dc:creator><pubDate>Fri, 26 Mar 2010 15:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Sun, 28 Mar 2010 01:11:08 GMT]]></title><description><![CDATA[<p>Wenn die getter keine Nebeneffekte haben sollte das kein Problem sein, IMO.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874357</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sun, 28 Mar 2010 01:11:08 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Mon, 29 Mar 2010 13:21:14 GMT]]></title><description><![CDATA[<p>Blue-Tiger schrieb:</p>
<blockquote>
<p>Wenn die getter keine Nebeneffekte haben sollte das kein Problem sein, IMO.</p>
</blockquote>
<p>Naja, ich sehe halt da auch die Möglichkeit von DB Zugriffen etc. Werde das wohl von Fall zu fall abklären müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1875110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1875110</guid><dc:creator><![CDATA[OpenMP]]></dc:creator><pubDate>Mon, 29 Mar 2010 13:21:14 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Mon, 29 Mar 2010 23:01:04 GMT]]></title><description><![CDATA[<p>Blue-Tiger schrieb:</p>
<blockquote>
<p>Wenn die getter keine Nebeneffekte haben sollte das kein Problem sein, IMO.</p>
</blockquote>
<p>Die getter müssen threadsafe sein.</p>
<p>keine Nebeneffekte != threadsafe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1875281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1875281</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 29 Mar 2010 23:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Tue, 30 Mar 2010 08:39:56 GMT]]></title><description><![CDATA[<p>Also bei einer generellen Durchsicht bin ich jetzt auf einige Dinge gestossen.<br />
So ist zum Beispiel atoi nicht threadsafe, auch andere C Funktionen muss ich da noch mal genauer abchecken. Das reine Getter Threadsafe sind, ist klar, aber hier gibt es halt noch reichlich anderen Code, welcher hinter den Comparatoren ausgeführt wird.</p>
<p>Am meisten Sorge macht mir zur Zeit diese Methode:</p>
<pre><code class="language-cpp">void* HASHTABLE::get( const unsigned long Key ) const
{
  HDRDSC *bucket; /* Zeiger auf die Kopfbeschreibung       */
  char *pkey = (char*)&amp;Key;
  for (bucket= hash[ MAKE_HASH(pkey, lhsht)]; bucket; bucket= bucket-&gt;next)
    if (Key == (bucket-&gt;ident))
      return bucket-&gt;object;
  return 0;
}
</code></pre>
<p>Wäre das immer noch Threadsicher? Das einzige was hier gesetzt wird, liegt auf dem Methoden Stack, was geschieht wenn 2 Threads nun eine Liste Sortieren, welche aus Objekten aus dem HashTable zusammengesetzt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1875356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1875356</guid><dc:creator><![CDATA[OpenMP]]></dc:creator><pubDate>Tue, 30 Mar 2010 08:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Tue, 30 Mar 2010 09:05:27 GMT]]></title><description><![CDATA[<p>Und was, wenn die Hashtable aus einem anderen Thread geaendert wird ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1875360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1875360</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 30 Mar 2010 09:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP und Threadsicherheit im Code on Tue, 30 Mar 2010 10:06:45 GMT]]></title><description><![CDATA[<p>Das kann ich wohl größtenteils Ausschließen.</p>
<p>Allerdings stelle ich mir auch jetzt die Frage, ob sich Multithreaded Sorting überhaupt lohnt, wenn ein Großteil der Listen wohl &lt; 1000 Einträge hat (evtl. sogar unter 100).</p>
<p>Eine Threadpool Lib habe ich dafür schon, welche auch die &quot;Solaris8&quot; Anforderung erfüllt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1875384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1875384</guid><dc:creator><![CDATA[OpenMP]]></dc:creator><pubDate>Tue, 30 Mar 2010 10:06:45 GMT</pubDate></item></channel></rss>