gpt4 book ai didi

c - pthread_cond_wait() 在收到信号后是否立即获取互斥锁?

转载 作者:行者123 更新时间:2023-11-30 14:40:39 33 4
gpt4 key购买 nike

我有一个线程 A,其函数在循环中运行,执行某些操作并唤醒另一个线程 B。然后它释放互斥体并继续下一次迭代。线程 B 等待直到收到信号,然后执行某些操作。我的问题是,是否保证 B 在收到信号后会获取互斥锁,或者线程 A 在下一次循环迭代中可以在 B 之前重新获取互斥锁?

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t signal = PTHREAD_COND_INITIALIZER;

int condition=0;

//function for thread A
void func_A(void *arg){
while(1) {
pthread_mutex_lock(&lock);
do_something();
condition=1;
pthread_cond_signal(&signal);
pthread_mutex_unlock(&lock);
}
}

//function for thread B
void func_B(void *arg) {
while(1) {
pthread_mutex_lock(&lock);
while(condition = 0)
pthread_cond_wait(&signal, &lock);
do_something_else();
condition=0;
pthread_mutex_unlock(&lock);
}
}

有没有办法确保 B 在发出信号后获取互斥锁?

最佳答案

Is there a way to make sure B acquires the mutex after it is signalled?

不,没有这样的方法 - B 将像往常一样与其他线程竞争拥有互斥锁。

此外,当 A 在发出信号时拥有互斥体时,如何期望 B 在收到信号时自动获取互斥体?

关于c - pthread_cond_wait() 在收到信号后是否立即获取互斥锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55432643/

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