使用互斥锁解决隧道任务

时间:2017-12-11 00:35:16

标签: c mutex

大家下午好。我已经开始学习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;
}

1 个答案:

答案 0 :(得分:0)

有关于解决问题的重要文献,例如: https://docs.oracle.com/cd/E19683-01/806-6867/sync-12/index.html 此外,在堆栈溢出中,已经存在一个问题:Mutex example / tutorial? 最后,这是你的问题彻底解决了:https://www.linkedin.com/pulse/semaphore-pthread-programming-linux-purvi-pathak?articleId=7625519368425966741 我可以在这里复制代码,但我不想剥夺作者对其成就的解决方案。