gpt4 book ai didi

c - 信号量同步

转载 作者:行者123 更新时间:2023-11-30 16:03:34 24 4
gpt4 key购买 nike

我有两个信号量 x (最初为 1)和 y (最初为 0)。

我的线程函数代码有点像这样:

...

wait(x);
//setting some vars
signal(x);

wait(y);

...

我想确保线程在 y 上排队等待,即。如果第一个线程首先完成了 x 保护部分,它应该首先等待 y,依此类推。在当前实现中,signal(x); 之后发生的上下文切换可以防止这种情况发生。

有没有办法做到这一点,或者我是否必须完全重构代码以防止这种情况发生?

最佳答案

不幸的是,信号量和所有其他 POSIX 锁定工具不允许设置优先级或类似的内容来调节它们的获取顺序。 (这不是一个错误,而是一个功能。-)

完成所需任务的最简单方法是通过 pthread_mutex_t 和相应的 pthread_cond_t 保护状态变量。在状态变量中,您可以实现一个简单的时间戳来跟踪线程通过 protected 部分的顺序。类似的东西

struct state {
pthread_mutex_t mutex;
pthread_cond_t cond;
size_t seen_at_x;
size_t seen_at_y;
};

关于c - 信号量同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3967105/

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