有一个隧道,全长5公里,有2列火车,全长200米, 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行)
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
pthread_mutex_t tunnel_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t train2_condition = PTHREAD_COND_INITIALIZER;
void* train1_run(void* arg)
{
while(1)
{
pthread_mutex_lock(&tunnel_mutex);
printf("列车A在隧道中行驶\n");
usleep(5000000);
printf("A列车已经通过隧道\n");
pthread_cond_signal(&train2_condition);
pthread_mutex_unlock(&tunnel_mutex);
}
return NULL;
}
void* train2_run(void* arg)
{
while(1)
{
pthread_mutex_lock(&tunnel_mutex);
pthread_cond_wait(&train2_condition, &tunnel_mutex);
printf("B列车在隧道中行驶\n");
usleep(10000000);
printf("B列车已经通过隧道\n");
pthread_mutex_unlock(&tunnel_mutex);
}
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t train1_thread, train2_thread;
pthread_create(&train1_thread, NULL, train1_run, NULL);
pthread_create(&train2_thread, NULL, train2_run, NULL);
pthread_join(train1_thread, NULL);
pthread_join(train2_thread, NULL);
return 0;
}