1

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

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 。

如果有人可以建议一种无需忙碌等待的方法吗?

4

2 回答 2

1

您需要在设置之前锁定互斥flag_TO_go = 1addfunction

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

另外,您在我不明白的两个函数中都将标志设置为 1。你确定这是对的吗?

于 2013-09-30T09:05:26.130 回答
0

尝试这个..

void addfunction(void *xyz)
{
    pthread_mutex_lock(&get_mutex);
    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= 0;
        //things to do
        //delete elemenst from a linked list
        pthread_mutex_unlock(&get_mutex);
    }
}
于 2013-09-30T09:39:03.067 回答