У меня проблема с моим кодом. По сути, я пытаюсь выполнить многопоточность, используя семафор, но ожидаемый результат неверен. Я хотел бы получить помощь по моей проблеме. Сценарий: поток поезд моделирует поезд, который использует 1 секунду, чтобы пересечь дорогу, и новый поезд будет прибывать каждые 5 секунд. Поток движение моделирует движение автомобиля. В этот поток добавляется 1 секунда сна, чтобы предотвратить быстрый запуск бесконечного цикла , в то время как цикл .
sem_t gate;
void* train(void* arg){
while(1){
printf("\n The railway gate is closed\n");
//critical section
printf("\n The train is crossing\n");
sleep(1); //train crossing for 1 second
printf("\n The railway gate is opened\n");
sem_post(&gate); // unlock signal
sleep(5); //the next train will arrive every 5 seconds
}
}
void* car(void* arg) {
while(1){
sem_wait(&gate);
printf("\n The cars are crossing the railway\n");
sleep(1);
}}
int main()
{
//these values are used to identify thread number
int thread0_id=0, thread1_id=1;
sem_init(&gate, 1, 1);
pthread_t t0,t1;
//create three threads, passing thread number as the forth argument
pthread_create(&t0,NULL,car,&thread0_id);
pthread_create(&t1,NULL,train,&thread1_id);
//join two threads after they finished running
pthread_join(t0,NULL);
pthread_join(t1,NULL);
sem_destroy(&gate);
return 0;
}
Этот результат я получаю.
Это результат, которого я пытаюсь достичь.