gpt4 book ai didi

c - pthread_cond_broadcast 在 POSIX 中没有忙等待

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:21 25 4
gpt4 key购买 nike

我是多线程新手,遇到了段错误。我正在使用

void addfunction(void *xyz)
{
flag_TO_go = 1;
pthread_cond_broadcast(&check_Queue2);
pthread_mutex_unlock(&get_mutex);
}

void delete_thread(void *abc)
{
while(1){
pthread_mutex_lock(&get_mutex);
while (!flag_TO_go ) {//condition variable
pthread_cond_wait(&check, &get_mutex);
}
flag_To_go= 1;
//things to do
//delete elemenst from a linked list
pthread_mutex_unlock(&get_mutex);
}
}

我得到的是段错误,因为我的列表在第一个元素删除后没有任何元素。但是我的线程正在获取锁并检查它 有没有其他方法可以使用 cond wait 。

是否有人可以建议一种无需忙碌等待的方法?

最佳答案

addfunction 中设置 flag_TO_go = 1 之前需要锁定互斥锁。

如果要做的事情真的意味着从列表中删除项目,也许您应该检查非空列表而不是使用 flag_TO_go 变量。

此外,您在我不理解的两个函数中都将标志设置为 1。你确定这是正确的吗?

关于c - pthread_cond_broadcast 在 POSIX 中没有忙等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090186/

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