gpt4 book ai didi

c - 使用线程从链表中删除元素

转载 作者:行者123 更新时间:2023-11-30 16:38:27 25 4
gpt4 key购买 nike

我有 x 个线程,我需要它们从链接列表中删除元素,但前提是列表不为空。但是,如果列表为空,我不希望它们消失,因为我正在使用命名管道随时添加新元素。我在检查链接列表是否为空时遇到问题,如果它有 1 个元素,我的所有线程都会进入该条件,第二个线程将使程序崩溃。

void threads(){
while(1){
if(isEmtpy!=1){
pthread_mutex_lock(&mutex);
//work
pthread_mutex_unlock(&mutex);
}
}
pthread_exit(NULL);
}

我想我需要更改互斥体的位置,但如果我将其放在 if 条件之前,则不会发生任何情况。

最佳答案

将锁移得更高,以保护 isEmpty 变量也应该足够了

void threads(){
while(1){
pthread_mutex_lock(&mutex);
if(isEmtpy!=1){
//work
isEmpty = hasElements(list) ? 0 : 1;
}
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}

isEmpty 的更改也应该发生在关键部分内。

关于c - 使用线程从链表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47481856/

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