Files
myFirstRep/race.c
T

39 lines
1.4 KiB
C

//
// Created by mrnek on 25.05.2023.
//
#include "race.h"
void * participant(void *arg) { // Функция для участника гонки
info->participants_in_tunnel = 0;
info->participants_finished = 0;
int participant_id = *(int *)arg;
// Подготовка участника
printf("Участник %d готовится к гонке\n", participant_id);
// Ожидание начала гонки
pthread_mutex_lock(info->tunnel_mutex);
while (info->participants_in_tunnel >= TUNNEL_CAPACITY) {
// Ждем, пока не освободится место в тоннеле
pthread_cond_wait(info->start_cond, info->tunnel_mutex);
}
info->participants_in_tunnel++;
pthread_mutex_unlock(info->tunnel_mutex);
printf("Участник %d начинает гонку\n", participant_id);
// Гонка
// Завершение гонки
pthread_mutex_lock(info->tunnel_mutex);
info->participants_finished++;
if (info->participants_finished == NUM_PARTICIPANTS) {
// Если все участники закончили гонку, уведомляем о завершении
pthread_cond_broadcast(info->finish_cond);
}
pthread_mutex_unlock(info->tunnel_mutex);
printf("Участник %d закончил гонку\n", participant_id);
pthread_exit(NULL);
}