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;
}
答案 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 我可以在这里复制代码,但我不想剥夺作者对其成就的解决方案。