pthread: ersten zugriff zulassen, andere threads dürfen nur passieren, wenn erster fertig



  • hi,

    folgendes problem: ich habe n threads und einen codeabschnitt CABS, der vom ersten thread, der an die stelle kommt, ausgeführt werden muss. Die anderen threads sollen CABS überspringen, aber erst weitermachen, wenn der erste damit fertig ist.

    pseudo:

    threadfunc()
    {
       if(otherthreads.nothereyet())
       {
          CABS;
       }
       else
       {
          while(firstone.doing(CABS));
       }
    }
    

    wie geht das mit pthreads (in C, ohne plusplus) am besten.



  • Du koenntest einen Mutex einsetzen und mittels try-lock (oder so) testen, ob du den Mutex locken kannst. Wie man den Owner des Mutexes herausfindet, weiss ich grad nicht, jedoch wurden dann alle anderen dann mittels join auf diesen warten. Das Problem mutet aber recht komisch an, so dass eine andere Loesung fuer das Gesamtproblem besser ist.



  • knivil schrieb:

    Du koenntest einen Mutex einsetzen und mittels try-lock (oder so) testen, ob du den Mutex locken kannst. Wie man den Owner des Mutexes herausfindet, weiss ich grad nicht, jedoch wurden dann alle anderen dann mittels join auf diesen warten. Das Problem mutet aber recht komisch an, so dass eine andere Loesung fuer das Gesamtproblem besser ist.

    ich möchte umgebungsvariablen einlesen, das muss ich nur einmal machen, und alle threads dürfen erst weitermachen, nachtem die variablen eingelesen sind. konzeptbedingt kann das nicht vor dem erstellen der threads machen (kann diesen code nicht ändern).



  • thread0r schrieb:

    static int done=0;
    threadfunc()
    {
       mutex.lock();
       if(!done)
       {
          CABS;
          done=1;
       }
       mutex.unlock();
    }
    

    wie du nen pthread_mutex_t verwendest findest du sicher 1000mal im netz 😉



  • ich möchte umgebungsvariablen einlesen, das muss ich nur einmal machen, und alle threads dürfen erst weitermachen, nachtem die variablen eingelesen sind. konzeptbedingt kann das nicht vor dem erstellen der threads machen (kann diesen code nicht ändern).

    Lese die Umgebungsvariablen erst ein und starte die Threads danach.



  • knivil schrieb:

    ich möchte umgebungsvariablen einlesen, das muss ich nur einmal machen, und alle threads dürfen erst weitermachen, nachtem die variablen eingelesen sind. konzeptbedingt kann das nicht vor dem erstellen der threads machen (kann diesen code nicht ändern).

    Lese die Umgebungsvariablen erst ein und starte die Threads danach.

    und jetzt kommt vermutlich

    konzeptbedingt kann das nicht vor dem erstellen der threads machen (kann diesen code nicht ändern).

    habt ihr langeweile? 😛



  • Erstellen und starten ist ja so ne Sache ... Ueberarbeite dein Konzept!



  • wenn die umgebungsvariablen als singleton verstanden werden, ist der käse doch schon gegessen, denn threadsichere singleton-implemetierungen gibts wie sand am strand.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • du kannst bei dieses problem zwei pthread_barriers verwenden. einmal vor dem setzen der umgebungsvariable, einmal danach. das sollte dein problem lösen. siehe man: pthread_barrier_init.


Anmelden zum Antworten