Kann mir wer diesen C Code erklären? (Mutex_Lock)?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

int arrived = 0;
pthread_mutex_t taxi;
pthread_cond_t station;

void *taxiDriver(void *p) {
  int i;
  for (i = 0; i < 3; ++i) {
    pthread_mutex_lock(&taxi);
    printf("mein Taxi faehrt\n");
    sleep(1);
    if (i > 1) arrived = 1;

    pthread_mutex_unlock(&taxi);
    pthread_cond_signal(&station);
  }
}

void *taxiGuest(void *p) {
  printf("Der Fahrgast entspannt sich ...\n");
  sleep(1);
  pthread_mutex_lock(&taxi);
  while (arrived == 0)
     pthread_cond_wait(&station, &taxi);
  printf("Der Fahrgast oeffnet die Tuer\n");
  sleep(1);
  printf("Der Fahrgast steigt aus\n");
  pthread_mutex_unlock(&taxi);
}

int main(int argc, char **argv) {
 pthread_t driver, guest;
 pthread_mutex_init(&taxi, NULL);
 pthread_cond_init(&station, NULL);
 pthread_create(&driver, NULL, taxiDriver, NULL);
 pthread_create(&guest, NULL, taxiGuest, NULL);
 pthread_join(guest, NULL);
 pthread_join(driver, NULL);
 pthread_mutex_destroy(&taxi);
 pthread_cond_destroy(&station);
 return 0;
}

In Farbig: https://hastebin.com/vuzusamolo.cpp

-----------------------------------------------------------------------------------------------------------------------------

Im Thread taxiGuest (bzw. in der Funktion) steht ja

while (arrived == 0)
     pthread_cond_wait(&station, &taxi);

innerhalb des Mutex_Lock. Müsste folglich nicht das Mutex IMMER gelockt sein, weil es das unlock nie erreicht? Weil while läuft ja dauerhaft. Hätte man somit nicht von der taxiDriver-Methode aus keinen Zugriff auf arrived? Weil Mutex lockt ja die Critical Section (also die Variable Arrived), oder nicht?

Kann mir das wer erklären, was genau das Mutex hier bringt, bzw. wie das Programm funktioniert?

Computer, Schule, Linux, Programmieren, Informatik, programmiersprache C, Synchronisation, Unix, Thread

Was möchtest Du wissen?