【发布时间】:2017-12-11 00:35:15
【问题描述】:
大家下午好。我已经开始学习 C 编程,并发现了一项有趣的任务来测试我的技能。老实说,这让我发疯,我不知道该怎么做。而不是使用信号量,我想使用互斥锁。我创建了一个自动调用 enter_tunnel 的程序,以便汽车进入。可能有两个方向 - 向北行驶( dir == NORTH )和向南行驶( dir == SOUTH ),但如果有汽车向您驶来,我不知道如何阻止汽车进入隧道。我试图找到更多关于如何使其工作的信息,但我不确定如何在这种情况下正确使用 pthread_mutex_lock、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;
}
【问题讨论】:
-
你没有解释你的应用程序的设计,所以不可能推荐任何东西。每辆车都由自己的线程管理吗?
-
“隧道”是否只有一条车道,所以只有在所有车辆都朝同一方向行驶时才能允许车辆通行?如果是这样,那么需要计算当前在隧道中的车辆数量以及它们都在哪个目录。如果一辆新车朝同一方向行驶,请增加计数并让汽车进入。否则,代码如何跟踪试图以相反方向进入隧道的汽车数量。 IE。应用程序需要更多分析,保存的数据需要代表当前情况。