我正在为一个项目制作剧院预订申请。我的剧院有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,但我不知道究竟是怎么回事。有帮助吗?
答案 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并且新线程可以执行内部代码。