<?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[phthreads anzahl]]></title><description><![CDATA[<p>abend<br />
kann mit mal bitte wer bei folgendem prob helfen<br />
das war eine testangabe</p>
<pre><code class="language-cpp">void* f(void p){            

   return 0;
 }
 main() {
   int i = 0;
   while ( i&lt;=5 )
   {
     pthread_t t;
     pthread_create(&amp;t, 0, f ,(void) i);
     i++;
   }
   pthread_exit(0);
 }
</code></pre>
<p>zu erledigen war nun folgendes<br />
a) In welchen Zeilen Befinden sich Syntaxfehler und wie lauten die Zeilen richtig?<br />
b) Unter der Annahme, dass alle Syntaxfehler beseitigt sind: aus wie vielen Threads besteht die Anwendung insgesamt?<br />
c) Unter der Annahme das alle Sytaxfehler beseitigt sind: ergänze das Programm soe, dass an der Konsole von jedem Thread<br />
genau eine Meldung erscheint. Die Meldung muss für jeden Thread unterschiedlich lauten</p>
<p>Fehler#1: Zeile 1 man braucht einen void* in der Klammer<br />
#2: beim phthread_create gehöhrt</p>
<pre><code class="language-cpp">pthread_create(&amp;t,0,f,(void *) i);
</code></pre>
<p>(also ebenfalls mit void*)</p>
<p>dann ich hätte vermutete dass es 6 threads sind, dürfte aber nicht stimmen</p>
<p>und wie macht man dass mit der ausgabe?</p>
<p>ich habs momentan auf das geändert</p>
<pre><code class="language-cpp">void* f(void *p){
  return 0;
}

 int main() {
    int i = 0;
    while ( i&lt;=5 )
    {
      cout &lt;&lt;&quot;Thread &quot; &lt;&lt; i &lt;&lt; &quot; wurde erzeugt&quot;&lt;&lt;endl;
      pthread_t t;
      pthread_create(&amp;t,0,f,(void *) i);
      i++;
    }
    pthread_exit(0);
 }
</code></pre>
<p>dürft aber auch net wirklich passen<br />
ich vermute es gehöhrt noch etwas in void* f(void* p) rein, weil das ist ja nicht einfachso vorhanden....</p>
<p>bitte um rasche hilfreiche antwort</p>
<p>stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133884/phthreads-anzahl</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 05:12:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133884.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Jan 2006 21:00:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 21:00:03 GMT]]></title><description><![CDATA[<p>abend<br />
kann mit mal bitte wer bei folgendem prob helfen<br />
das war eine testangabe</p>
<pre><code class="language-cpp">void* f(void p){            

   return 0;
 }
 main() {
   int i = 0;
   while ( i&lt;=5 )
   {
     pthread_t t;
     pthread_create(&amp;t, 0, f ,(void) i);
     i++;
   }
   pthread_exit(0);
 }
</code></pre>
<p>zu erledigen war nun folgendes<br />
a) In welchen Zeilen Befinden sich Syntaxfehler und wie lauten die Zeilen richtig?<br />
b) Unter der Annahme, dass alle Syntaxfehler beseitigt sind: aus wie vielen Threads besteht die Anwendung insgesamt?<br />
c) Unter der Annahme das alle Sytaxfehler beseitigt sind: ergänze das Programm soe, dass an der Konsole von jedem Thread<br />
genau eine Meldung erscheint. Die Meldung muss für jeden Thread unterschiedlich lauten</p>
<p>Fehler#1: Zeile 1 man braucht einen void* in der Klammer<br />
#2: beim phthread_create gehöhrt</p>
<pre><code class="language-cpp">pthread_create(&amp;t,0,f,(void *) i);
</code></pre>
<p>(also ebenfalls mit void*)</p>
<p>dann ich hätte vermutete dass es 6 threads sind, dürfte aber nicht stimmen</p>
<p>und wie macht man dass mit der ausgabe?</p>
<p>ich habs momentan auf das geändert</p>
<pre><code class="language-cpp">void* f(void *p){
  return 0;
}

 int main() {
    int i = 0;
    while ( i&lt;=5 )
    {
      cout &lt;&lt;&quot;Thread &quot; &lt;&lt; i &lt;&lt; &quot; wurde erzeugt&quot;&lt;&lt;endl;
      pthread_t t;
      pthread_create(&amp;t,0,f,(void *) i);
      i++;
    }
    pthread_exit(0);
 }
</code></pre>
<p>dürft aber auch net wirklich passen<br />
ich vermute es gehöhrt noch etwas in void* f(void* p) rein, weil das ist ja nicht einfachso vorhanden....</p>
<p>bitte um rasche hilfreiche antwort</p>
<p>stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/972439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972439</guid><dc:creator><![CDATA[stefan_]]></dc:creator><pubDate>Sat, 21 Jan 2006 21:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 21:14:59 GMT]]></title><description><![CDATA[<p>probier mal so</p>
<pre><code>void *f (void *p)
{
  return (void*)0;
}

int main() 
{
    int i = 0;
    while (i &lt;= 5)
    {
      pthread_t t;
      pthread_create (&amp;t, (const pthread_attr_t*)0, f, (void*)i);
      cout &lt;&lt; &quot;Thread &quot; &lt;&lt; i &lt;&lt; &quot; wurde erzeugt&quot; &lt;&lt; endl;
      i++;
    }
 }
</code></pre>
<p>nur so dahinghackt, also ohne gewähr <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/972447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972447</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 21 Jan 2006 21:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 21:27:43 GMT]]></title><description><![CDATA[<p>So ist es korrekt, auch wenn ich glaube, dass es nicht so gefordert war. Aber fast jede Abweichung ist ein Fehler.</p>
<pre><code class="language-cpp">extern &quot;C&quot; {
#include &lt;pthread.h&gt;
}
#include &lt;iostream&gt;

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

extern &quot;C&quot; void * f(void * p)
{            
   int * ptr = static_cast&lt;int *&gt;(p);
   pthread_mutex_lock(&amp;mutex);
   std::cout &lt;&lt; &quot;Meine Meldung: &quot; &lt;&lt; *ptr &lt;&lt; std::endl;
   pthread_mutex_unlock(&amp;mutex);
   return 0;
}

int main() {

   int * ptr[5];
   pthread_t t[5];

   for (int i = 0; i != 5; ++i) {
      ptr[i] = new int(i);
      pthread_create(&amp;t[i], NULL, f, static_cast&lt;void *&gt;(ptr[i]));        
   }

   pthread_mutex_lock(&amp;mutex);
   std::cout &lt;&lt; &quot;Mastermeldung&quot; &lt;&lt; std::endl;
   pthread_mutex_unlock(&amp;mutex);

   for (int i = 0; i != 5; ++i) {
      pthread_join(t[i], NULL);
      delete ptr[i];
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/972451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972451</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Sat, 21 Jan 2006 21:27:43 GMT</pubDate></item><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 21:43:54 GMT]]></title><description><![CDATA[<p>danke für die raschen antworten</p>
<p>das erste (von net) is doch fast das selbe wie meines oder?<br />
nur dass ich nicht verstehe was es damit auch sich aht &quot;(const pthread_attr_t*)&quot;</p>
<p>zum 2ten<br />
das ist mir für meinen momentanen wissenstand noch zu hoch, aber mit mutex mussten wir es noch nicht machen, da wir das da noch nicht gelernt hatten</p>
<p>danke jdenfalls</p>
]]></description><link>https://www.c-plusplus.net/forum/post/972465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972465</guid><dc:creator><![CDATA[stefan_]]></dc:creator><pubDate>Sat, 21 Jan 2006 21:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 21:48:03 GMT]]></title><description><![CDATA[<p>stefan_ schrieb:</p>
<blockquote>
<p>das erste (von net) is doch fast das selbe wie meines oder?<br />
nur dass ich nicht verstehe was es damit auch sich aht &quot;(const pthread_attr_t*)&quot;</p>
</blockquote>
<p>ja, ich hab nur ein paar typecasts reingesetzt. jag's doch mal durch nen compiler, dann siehste ja ob fehlermeldungen kommen. das von ponto sieht ja wohl ein bisschen extrem aus (ich nehme aber an, er hats ausprobiert und es kommen keine fehlermeldungen <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/972469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972469</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 21 Jan 2006 21:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 21:57:13 GMT]]></title><description><![CDATA[<p>stefan_ schrieb:</p>
<blockquote>
<p>danke für die raschen antworten</p>
<p>das erste (von net) is doch fast das selbe wie meines oder?<br />
nur dass ich nicht verstehe was es damit auch sich aht &quot;(const pthread_attr_t*)&quot;</p>
<p>zum 2ten<br />
das ist mir für meinen momentanen wissenstand noch zu hoch, aber mit mutex mussten wir es noch nicht machen, da wir das da noch nicht gelernt hatten</p>
<p>danke jdenfalls</p>
</blockquote>
<p>Hier nochmal der Code mit Kommentaren und ohne dynamische Allozierung:</p>
<pre><code class="language-cpp">extern &quot;C&quot; {
// Phtreads sind eine C Bibliothek und müssen deshalb mit extern &quot;C&quot; included
// werden, auch wenn in 95% der Fälle das innerhalb der phtread.h bereits
// getan wird.
#include &lt;pthread.h&gt;  
}

// Ausgabe mit std::cout
#include &lt;iostream&gt;

//Ein Mutex wird statisch initialisiert.
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

//Die Funktion, die pthread_create bekommt muss C Linkage haben. Deshalb muss
//diese Funktion extern &quot;C&quot; deklariert werden. Der Parameter und der Rückgabe
//wert müssen beide void * sein.
extern &quot;C&quot; void * f(void * p)
{            
   //Wir wissen, dass der Parameter ein int * ist und können den damit casten
   int * ptr = static_cast&lt;int *&gt;(p);

   //Es ist notwendig die Ausgabe der Meldung mit einem Mutex zu schützen, 
   //da die benutzung von std::cout nicht reentrant ist. Wenn zwei Threads
   //gleichzeitig schreiben, gibt das ein Chaos. Gleiches gilt für Ausgaben
   //via printf und co.
   pthread_mutex_lock(&amp;mutex);
   std::cout &lt;&lt; &quot;Meine Meldung: &quot; &lt;&lt; *ptr &lt;&lt; std::endl;
   pthread_mutex_unlock(&amp;mutex);

   //Aus der mit pthread_create aufgerufenen Funktion zurückkehren heisst auch
   //den Thread beenden.
   return 0;
}

//main muss immer int zurückgeben
int main() {

   //jeder thread bekommt einen eigenen int Wert
   int arr[5];
   //Jeder Thread hat einen pthread_t. Diesen müssen wir uns merken,
   //damit wir die threads sauber aufräumen können
   pthread_t t[5];

   for (int i = 0; i != 5; ++i) {
      arr[i] = i;
      //Die fünf zusätzclihen Threads werden erzeugt, indem ein Zeiger auf den
      //Wert übergeben wird. Die pthread_t Id wird sich zum späteren Aufräumen
      //gesichert.
      pthread_create(&amp;t[i], NULL, f, static_cast&lt;void *&gt;(&amp;arr[i]));        
   }

   //Der Hauptthread muss sich natürlich auch den Ausgabekanal sichern.
   pthread_mutex_lock(&amp;mutex);
   std::cout &lt;&lt; &quot;Mastermeldung&quot; &lt;&lt; std::endl;
   pthread_mutex_unlock(&amp;mutex);

   for (int i = 0; i != 5; ++i) {
      //Nachdem die Threads sich beendet haben, können wir mit dem pthread_join
      //Aufruf dafür sorgen, dass sie sauber abgewickelt werden und keine
      //Leichen übrig bleiben.
      pthread_join(t[i], NULL);
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/972476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972476</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Sat, 21 Jan 2006 21:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to phthreads anzahl on Sat, 21 Jan 2006 22:37:53 GMT]]></title><description><![CDATA[<p>danke für die erklärungen dazu<br />
werd mir das mal genauer anschaun...</p>
<p>gn8</p>
]]></description><link>https://www.c-plusplus.net/forum/post/972518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972518</guid><dc:creator><![CDATA[stefan_]]></dc:creator><pubDate>Sat, 21 Jan 2006 22:37:53 GMT</pubDate></item></channel></rss>