我正在尝试在使用互斥锁时从链表中删除节点。 出于某种原因,这可以在没有互斥锁的情况下正常工作,但如果我添加锁,它仍会保留已删除节点中的一些数据。 有人可以请教吗? 这是我的代码:
ptr2=head;
ptr1=ptr2->next;
pthread_mutex_lock(&ptr2->lock);
pthread_mutex_lock(&ptr1->lock);
if( head == NULL){
fprintf(stderr,"List is empty");
exit(1);
}
if(record == 1){
head=head->next;
pthread_mutex_unlock(&ptr1->lock);
pthread_mutex_unlock(&ptr2->lock);
free(ptr2);
}
else if (record > 1 && record < list_size){
while(count <= record-1 && ptr1 ){
pthread_mutex_unlock(&ptr1->lock);
pthread_mutex_unlock(&ptr2->lock);*/
ptr2 = ptr1;
ptr1 = ptr1->next;
count++;
pthread_mutex_trylock(&ptr2->lock);
pthread_mutex_trylock(&ptr1->lock);
}
if(ptr1){
ptr2->next = ptr2->next->next;
pthread_mutex_trylock(&ptr2->lock);
pthread_mutex_trylock(&ptr1->lock);
}
pthread_mutex_unlock(&ptr1->lock);
pthread_mutex_unlock(&ptr2->lock);
free(ptr1);
}
else
printf("\nInvalid record. Please try again");