Я новичок в многопоточности и застревает с ошибкой сегментации. Я использую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);
}
}
Что я получаю ошибку сегментации, потому что мой список не имеет какой-либо элемент после первого удаления элемента. но мой поток aqcquiring lock и проверка его Есть ли другой способ использования cond wait.
Если кто-нибудь может предложить способ сделать это без ожиданного ожидания?
Да, я инициализирован flag_To_go до 0 во всем мире так, когда приходит сигнал. Функция Delete получит блокировку и выполнит удаление. Я устанавливаю блокировку мьютекса перед установкой флага на 1. есть ли другой способ использования cond wait – user2825892
@ user2825892: Да, установка его глобально на 0 происходит один раз. Где он устанавливается в 0 после установки 1? –
Я не меняю его на 0. потому что, как только список будет добавлен со всеми элементами, мой поток (addfucntion) выйдет и удалит функцию (поток), должен удалить элементы до пустых. Итак, ситуация такова, что если я сделаю flag_to_go = 0 после одной операции, он не будет проверять список снова (и поток сигналов уже мертв), и если я сделаю это, то он начнет проверку элементов до их добавления. – user2825892