gpt4 book ai didi

c - 如何从等待条件变量/信号量的线程池中唤醒线程?

转载 作者:行者123 更新时间:2023-11-30 20:35:53 25 4
gpt4 key购买 nike

情况:

  1. 线程A调用wait(&sem);//成功
  2. 线程B调用wait(&sem);// block
  3. 线程C调用wait(&sem);// block
  4. 线程A调用信号(&sem);

现在怎么办?哪个线程被唤醒?

这是随机的吗?

但是,我总是希望线程 B 在线程 C 之前醒来,因为 B 在 C 之前调用了 wait。是否有现有的机制可以使用sync来做到这一点。机甲。?如果需要,请明确提及任何其他数据结构的使用!

最佳答案

其实我一直在寻找这样的东西。可以使用条件变量来实现线程执行的序列化。

Mutex M;
Condition Variable C = 1;

thread_function_A()
{
pthread_mutex_lock(M);

while (C != 1)
pthread_cond_wait(C, M);

CRITICAL SECTION STARTS;
CRITICAL SECTION ENDS;
C++;
pthread_mutex_unlock(M);
}

thread_function_B()
{
pthread_mutex_lock(M)

while (C != 2)
pthread_cond_wait(C, M);

CRITICAL SECTION STARTS
CRITICAL SECTION ENDS
C++;
pthread_mutex_unlock(M)
}

thread_function_C()
{
pthread_mutex_lock(M)

while (C != 3)
pthread_cond_wait(C, M);

CRITICAL SECTION STARTS
CRITICAL SECTION ENDS
C++;
pthread_mutex_unlock(M)
}

关于c - 如何从等待条件变量/信号量的线程池中唤醒线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273899/

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