Какова функция блокировок мьютекса как члена структуры C структур - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть задание, которое включает в себя структуру плоскости и включает поля pthread_mutex_t и pthread_cond_t. Однако я не могу понять, что происходит, когда мы блокируем эту блокировку или ждем этого условия.

Например:

void* landingPlane(void *ID){
  int planeID = (int) ID;
  plane temp;
  temp.ID = planeID;
  temp.requestTime = time(NULL);
  pthread_mutex_init(&(temp.mutex), NULL);
  pthread_cond_init(&(temp.cond), NULL);
  planesArray[planeID] = temp;
  int emergency_id;

  pthread_mutex_lock(&runway_mutex); // this is a global mutex, I know how it works

  pthread_mutex_lock(&planesArray[planeID].mutex);

  // critical section

  pthread_mutex_unlock(&planesArray[planeID].mutex);

  pthread_mutex_unlock(&runway_mutex);
  pthread_exit(NULL);
  }

Какой смысл блокировать блокировку мьютекса внутри плоскости?

1 Ответ

0 голосов
/ 24 апреля 2020

Я думаю, что это, вероятно, ошибка.

Вероятно, runway_mutex должен был защищать введение или удаление плоскостей в массив и из массива, тогда как мьютексы отдельных плоскостей должны были защищать данные в конкретной плоскости.

Но это довольно сложный шаблон, чтобы правильно понять, и, очевидно, вы определенно не будете удерживать runway_mutex, пока вы манипулируете отдельными плоскостями, и не инициализируете мьютекс объекта внутри массив без удержания каких-либо блокировок.

Трудно сказать, не видя код, подобный коду, который добавляет плоскости в массив.

...