我是多线程新手,并且遇到了分段错误。我正在使用pthread_cond_broadcast无需在POSIX中忙等待
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。
如果有人可以建议一种方法来做到这一点而不需要等待?
是的,我初始化flag_To_go 0全局所以每当信号到来。删除功能将获得锁并执行删除。我在将标志设置为1之前将互斥锁锁定。 是否有任何其他方式使用cond wait – user2825892
@ user2825892:是的,将其全局设置为0会发生一次。设置为1后,它在哪里设置为0? –
我不会将它更改为0。因为一旦我的名单得到了所有元素,我的线程(addfucntion)退出及deletefunction(线程)附加有权删除,直到空的元素。所以这里的情况是,如果我一个操作之后使flag_to_go = 0就不会再次检查列表(和信号线,现在已经死了),如果我让1.它开始检查的元素,他们得到附加之前。 – user2825892