<?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 Parallel: Lesen von gemeinsamer Referenz]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe mal wieder eine Frage.</p>
<p>In <a href="http://www.c-plusplus.net/forum/p2352996#2352996" rel="nofollow">diesem Post</a> heißt es, dass sich lesender Zugriff verschiedener Threads auf verschiedene Indizes eines Array <em>eigentlich</em> nicht im Weg stehen.</p>
<p>Deshalb die naive Frage: Ist der nachfolgende Code 'eigentlich' in Ordnung? Jeder Thread soll eine Funktion zur Verfügung gestellt bekommen - nämlich <code>operator()</code> des Wrappers - mit welcher der Index i des Vektors ausgelesen werden kann.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;omp.h&gt;

struct wrapper
{
	wrapper(std::vector&lt;double&gt;&amp;, int);
	std::vector&lt;double&gt;&amp; vec;
	int i;
	double operator()();
};

wrapper::wrapper(std::vector&lt;double&gt;&amp; vec, int i):vec(vec),i(i){}

auto wrapper::operator()() -&gt; double
{
	return vec[i];
}

int main()
{
	std::vector&lt;double&gt; vec({{1.2,3.4,6.38,10.23}});

	omp_set_num_threads(vec.size());

	# pragma omp parallel
	{
		wrapper wrap(vec,omp_get_thread_num());

		# pragma omp critical
		{
			std::cout &lt;&lt; wrap() &lt;&lt; std::endl;
		}
	}

	return 0;
}
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320959/openmp-parallel-lesen-von-gemeinsamer-referenz</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:14:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320959.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Oct 2013 13:20:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OpenMP Parallel: Lesen von gemeinsamer Referenz on Fri, 18 Oct 2013 13:20:10 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe mal wieder eine Frage.</p>
<p>In <a href="http://www.c-plusplus.net/forum/p2352996#2352996" rel="nofollow">diesem Post</a> heißt es, dass sich lesender Zugriff verschiedener Threads auf verschiedene Indizes eines Array <em>eigentlich</em> nicht im Weg stehen.</p>
<p>Deshalb die naive Frage: Ist der nachfolgende Code 'eigentlich' in Ordnung? Jeder Thread soll eine Funktion zur Verfügung gestellt bekommen - nämlich <code>operator()</code> des Wrappers - mit welcher der Index i des Vektors ausgelesen werden kann.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;omp.h&gt;

struct wrapper
{
	wrapper(std::vector&lt;double&gt;&amp;, int);
	std::vector&lt;double&gt;&amp; vec;
	int i;
	double operator()();
};

wrapper::wrapper(std::vector&lt;double&gt;&amp; vec, int i):vec(vec),i(i){}

auto wrapper::operator()() -&gt; double
{
	return vec[i];
}

int main()
{
	std::vector&lt;double&gt; vec({{1.2,3.4,6.38,10.23}});

	omp_set_num_threads(vec.size());

	# pragma omp parallel
	{
		wrapper wrap(vec,omp_get_thread_num());

		# pragma omp critical
		{
			std::cout &lt;&lt; wrap() &lt;&lt; std::endl;
		}
	}

	return 0;
}
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361186</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 18 Oct 2013 13:20:10 GMT</pubDate></item></channel></rss>