gpt4 book ai didi

POSIX 中的条件变量

转载 作者:行者123 更新时间:2023-11-30 17:40:06 25 4
gpt4 key购买 nike

我正在为一个项目制作剧院预订申请。我的影院有10个运算符(operator),所以每次只能有10个顾客同时预约。当一个客户端完成后,另一个客户端就会与运算符(operator)连接。

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

每当客户端连接时我的想法是什么

lock mutex()
counter++;
if(counter > 10)
block thread() until an operator is free
else
do computations
unlock mutex()

我知道我必须使用 cond_signal 和 cond_wait 但我不知 Prop 体如何使用。有什么帮助吗?

最佳答案

调用线程之前:

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,并且新线程可以执行内部代码。

关于POSIX 中的条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21611302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com