Gemeinsame Daten für Threads - Mutex ?



  • Ich moechte in einem thread eine queue fuellen und diese queue in einem anderen thread auslesen.

    dazu muss ich wohl einen mutex verwenden - aber wie?

    hier mal ein thread beispiel das ich im forum gefunden habe, wo setze ich wie den mutex?

    /*Uses Linux gcc *//
    
    #include <pthread.h>
    #include <stdio.h>  // printf
    #include <unistd.h> // sleep
    
    void* thread_function1(void*) { // Der Type ist wichtig: void* als Parameter und Rückgabe
      printf("Thread 1 gestartet\n");
      sleep(2); // 2 Sekunden warten
        for (int count = 0; count < 10; count++)
        {
            printf("Inside thread1 count %d \n",count);
            sleep (1);
        }
      printf("Thread 1 wird beendet\n");
    
      return NULL; // oder in C++: return 0;// Damit kann man Werte zurückgeben
    }
    
    void* thread_function2(void*) { // Der Type ist wichtig: void* als Parameter und Rückgabe
      printf("Thread 2 gestartet\n");
      sleep(3); // 3 Sekunden warten
        for (int count = 0; count < 5; count++)
        {
            printf("Inside thread2 count %d \n",count);
            sleep (1);
        }
      printf("Thread 2 wird beendet\n");
    
      return NULL; // oder in C++: return 0;// Damit kann man Werte zurückgeben
    }
    
    int main() 
    {
    
    //nur als beispiel
    //zugriff ueber thread1 und thread2 - aber wie?
    int gemeinsame_variable;
    
    pthread_t thread1; // Die Variable, in der der Tread 'gespeichert' wird
      // ein Initialisieren bedeutet zugleich das Erzeugen eines Threads:
    
        pthread_t thread2;
    
      pthread_create( &thread1, NULL, thread_function1, NULL );
      sleep(1); // 1 Sekunde warten, damit der Thread seinen Text ausgibt
    
        pthread_create( &thread2, NULL, thread_function2, NULL );
      sleep(1); // 1 Sekunde warten, damit der Thread seinen Text ausgibt
    
      printf("Hauptprogramm\n");
    
      // Schließlich sollte man noch auf den Prozess warten:
      pthread_join( thread1, NULL );
        pthread_join( thread2, NULL );
    
      printf("Ende\n");
    
      return 0;
    }
    


  • hilft das hier:
    Threadwechsel unterdrücken



  • Danke.

    Das ist glaube ich genau was ich suche 😉


Anmelden zum Antworten