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 = 1に設定する前にミューテックスをロックする必要がありますaddfunction

また、実際にリストからアイテムを削除することを意味する場合は、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 に答える