<?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[Processor-Algortihmus]]></title><description><![CDATA[<p>Hallo miteinander!</p>
<p>Ich versuche gerade, die get_stealable_task() zu implementieren. Allerdings komm ich nicht weiter..zudem weiss ich auch nicht, ob das, was ich bisher gemacht habe, stimmt.</p>
<p>Hier der cpp-Code:</p>
<pre><code class="language-cpp">/* Returns and removes the next stealable task from this processor.
   If there is no stealable task, NULL is returned.
*/
task* processor::get_stealable_task()
{
   	long t = this-&gt;get_identifier();
	long b = this-&gt;get_pending_tasks();
	long size = b-t;
	if(size &lt;= 0)
	{
		return NULL;
	}
	//...
}
</code></pre>
<p>.hpp:</p>
<pre><code class="language-cpp">#ifndef PROCESSOR_HPP
#define PROCESSOR_HPP

#include &lt;queue&gt;
#include &quot;task.hpp&quot;

class processor
{
private:
	int _identifier;
	std::deque&lt;task*&gt; _assigned_tasks;

public:
	processor(int identifier);

	int get_identifier() const;
	int get_pending_tasks() const;

	task* get_stealable_task();
	void finish_current_task();
	void assign_or_steal_task(std::queue&lt;task*&gt;&amp; tasks, std::vector&lt;processor&gt;&amp; processors);
	void assign_task(task* task);
};

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/284478/processor-algortihmus</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 00:18:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284478.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Apr 2011 13:26:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 13:26:18 GMT]]></title><description><![CDATA[<p>Hallo miteinander!</p>
<p>Ich versuche gerade, die get_stealable_task() zu implementieren. Allerdings komm ich nicht weiter..zudem weiss ich auch nicht, ob das, was ich bisher gemacht habe, stimmt.</p>
<p>Hier der cpp-Code:</p>
<pre><code class="language-cpp">/* Returns and removes the next stealable task from this processor.
   If there is no stealable task, NULL is returned.
*/
task* processor::get_stealable_task()
{
   	long t = this-&gt;get_identifier();
	long b = this-&gt;get_pending_tasks();
	long size = b-t;
	if(size &lt;= 0)
	{
		return NULL;
	}
	//...
}
</code></pre>
<p>.hpp:</p>
<pre><code class="language-cpp">#ifndef PROCESSOR_HPP
#define PROCESSOR_HPP

#include &lt;queue&gt;
#include &quot;task.hpp&quot;

class processor
{
private:
	int _identifier;
	std::deque&lt;task*&gt; _assigned_tasks;

public:
	processor(int identifier);

	int get_identifier() const;
	int get_pending_tasks() const;

	task* get_stealable_task();
	void finish_current_task();
	void assign_or_steal_task(std::queue&lt;task*&gt;&amp; tasks, std::vector&lt;processor&gt;&amp; processors);
	void assign_task(task* task);
};

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043718</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 13:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 13:50:03 GMT]]></title><description><![CDATA[<p>Woran stellst du denn fest, ob ein task &quot;stealable&quot; ist? Wenn du das beantworten kannst, ist der Rest eigentlich ganz einfach: Du läufst einmal durch die Task-Liste und lieferst den esten Task zuück, der stealable ist (entweder manuell oder per std::find_if()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043739</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 13:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 14:35:48 GMT]]></title><description><![CDATA[<p>Hmm..also den Algorithmus versteh' ich glaub schon.<br />
Man hat Tasks in einer (globalen) queue. Jeder Prozessor wird dann einer Task zugeordnet. Wenn ein Prozessor nichts mehr zu tun hat, bekommt er eine nächste Task.<br />
Die stealable tasks sind also einfach jene, die noch nicht bearbeitet wurden.</p>
<p>Man müsste es wahrscheinlich schon manuell machen..allerdings fehlt mir hierzu wirklich der Ansatz (bzw. der Beginn..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043749</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 14:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 17:02:11 GMT]]></title><description><![CDATA[<p>Das vorherige Problem hat sich erledigt - war wirklich keine grosse Sache <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>Aber bei der Methode hier:</p>
<pre><code class="language-cpp">/* Assigns the next task to this processor. First, all processors are checked for pending tasks.
   If a pending task is found, it is stolen from that processor and assigned to this processor.
   If there is no pending processor, the first task from tasks_ is assigned to this processor.
*/
void processor::assign_or_steal_task(std::queue&lt;task*&gt;&amp; tasks_, std::vector&lt;processor&gt;&amp; processors_)
{
	std::cout &lt;&lt; &quot;[P&quot; &lt;&lt; _identifier &lt;&lt; &quot;] Assigning task. Pending tasks: &quot;;
	for(std::deque&lt;task*&gt;::iterator t = _assigned_tasks.begin(); t != _assigned_tasks.end(); ++t)
	{
		std::cout &lt;&lt; (*t)-&gt;get_identifier() &lt;&lt; &quot; &quot;;
	}

	std::cout &lt;&lt; std::endl;

	if(processor.get_pending_tasks() != NULL)
	{
		processors_.push_back(processor.get_stealable_task());
		std::cout &lt;&lt; &quot;[P&quot; &lt;&lt; _identifier &lt;&lt; &quot;] Stole task 1 from processor 3&quot; &lt;&lt; std::endl;
	}
	else
	{
		processors_.push_back(tasks_.front());
		std::cout &lt;&lt; &quot;[P&quot; &lt;&lt; _identifier &lt;&lt; &quot;] Stole task 1 from processor 3&quot; &lt;&lt; std::endl;
	}

}
</code></pre>
<p>stimmt etwas noch nicht so, wie es sollte.<br />
Mein Compiler reklamiert wegen den zwei push_back s .<br />
Woran liegt der Fehler, bzw. wie lässt sich dieser beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043794</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:02:11 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 17:06:18 GMT]]></title><description><![CDATA[<p>du versuchst wohl nen task als prozessor zu speichern.ich vermute mal, dass das nicht funktioniert. Fehlermeldungen wären natürlich hilfreich um das rauszufinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043796</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 17:07:43 GMT]]></title><description><![CDATA[<p>Es hilft die FEHLERMELDUNG Wörtlich zu zitieren ... abgesehen davon schau dir mal was für typen deine vectoren enthalten und was die Methoden zurückgeben dann geht dir ein Task auf im Prozessor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043797</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 17:09:43 GMT]]></title><description><![CDATA[<p>Die Fehlermeldung lautet:</p>
<pre><code>\projects\assignment 3\a2\a2\processor.cpp(67): error C2059: Syntaxfehler: '.'
\projects\assignment 3\a2\a2\processor.cpp(68): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
\projects\assignment 3\a2\a2\processor.cpp(69): warning C4832: Das Token '.' ist nach UDT 'processor' illegal
\projects\assignment 3\a2\a2\processor.hpp(9): Siehe Deklaration von 'processor'
\projects\assignment 3\a2\a2\processor.cpp(69): error C2275: 'processor': Ungültige Verwendung dieses Typs als Ausdruck
\projects\assignment 3\a2\a2\processor.cpp(69): error C2228: Links von &quot;.get_stealable_task&quot; muss sich eine Klasse/Struktur/Union befinden.
\projects\assignment 3\a2\a2\processor.cpp(72): error C2181: Ungültiges 'else' ohne zugehöriges 'if'
\projects\assignment 3\a2\a2\processor.cpp(74): error C2664: 'void std::vector&lt;_Ty&gt;::push_back(_Ty &amp;&amp;)': Konvertierung des Parameters 1 von 'task *' in 'processor &amp;&amp;' nicht möglich
1&gt;          with
1&gt;          [
1&gt;              _Ty=processor
1&gt;          ]
1&gt;          Ursache: Konvertierung von 'task *' in 'processor' nicht möglich
1&gt;          Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043799</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 18:59:03 GMT]]></title><description><![CDATA[<p>Ich habe die Abfrage nun wie folgt geändert:</p>
<pre><code class="language-cpp">if(processor.get_pending_tasks() != NULL)
	{
		tasks_.push(processor.get_stealable_task());
		//processors_.push_back(processor.get_stealable_task());
		std::cout &lt;&lt; &quot;[P&quot; &lt;&lt; _identifier &lt;&lt; &quot;] Stole task 1 from processor 3&quot; &lt;&lt; std::endl;
	}
	else
	{
		tasks_.push(tasks_.front());
		//processors_.push_back(tasks_.front());
		std::cout &lt;&lt; &quot;[P&quot; &lt;&lt; _identifier &lt;&lt; &quot;] Stole task 1 from processor 3&quot; &lt;&lt; std::endl;
	}
</code></pre>
<p>Allerdings immernoch mit der Fehlermeldung:</p>
<pre><code>processor.cpp(67): error C2059: Syntaxfehler: '.'
\processor.cpp(68): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
\processor.cpp(69): warning C4832: Das Token '.' ist nach UDT 'processor' illegal
\processor.hpp(9): Siehe Deklaration von 'processor'
\processor.cpp(69): error C2275: 'processor': Ungültige Verwendung dieses Typs als Ausdruck
\processor.cpp(69): error C2228: Links von &quot;.get_stealable_task&quot; muss sich eine Klasse/Struktur/Union befinden.
\processor.cpp(73): error C2181: Ungültiges 'else' ohne zugehöriges 'if'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043850</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 19:13:10 GMT]]></title><description><![CDATA[<p>Du hast die Klasse &quot;processor&quot; genannt, und verwendest jetzt diesen Bezeichner als Variablen-Namen. Wenn du auf das Objekt zugreifen willst, für das die Methode aufgerufen wurde, dafür gibt es this (also &quot;this-&gt;get_stealable_task()&quot; oder nur &quot;get_stealable_task()&quot; etc.). Wenn du ein auf ein anderes Objekt zugreifen willst, mußt du natürlich dieses angeben (z.B. &quot;processors_[0].get_stealable_task()&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043854</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 19:13:10 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 20:05:38 GMT]]></title><description><![CDATA[<p>Ahh... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Besten Dank!<br />
Hat funktioniert! <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>..jetzt muss ich nur noch schauen, wo ich keine Abbruchbedingung gemacht habe, denn das Programm läuft momentan noch endlos weiter.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043873</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 20:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 20:26:13 GMT]]></title><description><![CDATA[<p>Ihr seht den Fehler auch nicht, oder?<br />
..dann muss ich den Fehler nämlich nicht bei diesen Funktionen suchen <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043886</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Sat, 02 Apr 2011 20:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Processor-Algortihmus on Sat, 02 Apr 2011 20:48:50 GMT]]></title><description><![CDATA[<p>Also in der angegebenen Funktion gibt es nur eine Schleife (die die freien Tasks ausgibt). Also liegt die Endlosschleife mit Sicherheit woanders. Wo, kann dir dein Debugger vermutlich ganz genau sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043893</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 20:48:50 GMT</pubDate></item></channel></rss>