POSIX的条件变量

时间:2014-02-06 18:42:26

标签: c multithreading posix

我正在为一个项目制作剧院预订申请。我的剧院有10个运营商,所以每次只有10个客户可以同时预订。客户端完成后,另一个客户端与操作员连接。

我建立了服务器 - 客户端连接。每次出现新客户端时我都会创建一个新线程。现在我的问题是如何让10个线程同时进行操作。我知道我必须使用条件变量,但不知道究竟是多少。

无论何时客户连接

,我的想法是什么
lock mutex()
counter++;
if(counter > 10)
  block thread() until an operator is free
else
  do computations
unlock mutex()

我知道我必须使用cond_signal和cond_wait,但我不知道究竟是怎么回事。有帮助吗?

1 个答案:

答案 0 :(得分:0)

在调用线程之前:

sem_t *sem;
sem = (sem_t*)malloc(sizeof(sem_t));
sem_init(sem, 0, 10);

线程内部:

sem_wait(sem);

do computations
sem_post(sem);

sem_init的最后一个参数是允许执行多少个线程。 每次调用sem_wait时该值都会减小,如果它变为< 0,则线程暂停,直到它再次变为正数。 当你调用sem_post时,该值增加1并且新线程可以执行内部代码。