C 使用互斥体解决隧道任务

C 使用互斥体解决隧道任务,c,mutex,C,Mutex,大家下午好。我已经开始学习C编程,并找到了一个有趣的任务来测试我的技能。老实说,这让我发疯,我不知道该怎么做。我希望使用互斥量,而不是使用信号量。我已经创建了一个程序,可以自动调用enter_tunnel,让汽车进入。可能有两个方向——向北行驶(dir==向北)和向南行驶(dir==向南),但如果有车朝你驶来,我想不出如何阻止车进入隧道。我试图找到更多的信息如何使它工作,我不知道如何正确使用pthread_mutex_lock,pthread_mutex_unlock,pthread_mutex

大家下午好。我已经开始学习C编程,并找到了一个有趣的任务来测试我的技能。老实说,这让我发疯,我不知道该怎么做。我希望使用互斥量,而不是使用信号量。我已经创建了一个程序,可以自动调用enter_tunnel,让汽车进入。可能有两个方向——向北行驶(dir==向北)和向南行驶(dir==向南),但如果有车朝你驶来,我想不出如何阻止车进入隧道。我试图找到更多的信息如何使它工作,我不知道如何正确使用pthread_mutex_lock,pthread_mutex_unlock,pthread_mutex_unlock,pthread_mutex_signal在这个上下文中

static int n_in_tunnel[2];
static unsigned long n_total[2];
static pthread_mutex_t tunnel_flow;

void enter_tunnel(direction_t dir) {
    int mutex = pthread_mutex_init(&tunnel_flow, NULL);
    assert(mutex == 0);

    n_in_tunnel[dir] += 1;
   // assert(n_in_tunnel[opposite(dir)] == 0);
}

void exit_tunnel(direction_t dir) {
    n_in_tunnel[dir] -= 1;
    n_total[dir] += 1;
}

有大量关于问题解决的文献,例如: 此外,在堆栈溢出中,已经存在一个问题: 最后,你的问题完全解决了:
我可以在这里复制代码,但我不想剥夺作者解决方案的成就。

您没有解释应用程序的设计,因此无法推荐任何内容。每辆车都有自己的路线吗?“隧道”只有一条车道,所以只有在所有车都朝同一个方向行驶的情况下才能通行吗?如果是这样的话,那么需要统计一下目前在隧道中的车辆数量以及它们都要去哪个目录。如果一辆新车正朝着同一个方向行驶,增加计数,让车进入。另一方面,代码如何跟踪试图进入相反方向隧道的车辆数量。也就是说,应用程序需要更多的分析,保存的数据需要代表当前的情况。