Мне нужно сделать три потока с общим доступом к связанному списку: поиск, добавление, удаление потока. Прослеживание потока только в списке. Добавление потоков добавляет элемент в конце списка, и они взаимно исключают (защищены мьютексом), но вы можете искать и добавлять одновременно. Удаление потоков удаляет элемент из любой точки в списке, и они являются эксклюзивными с добавлением и поиском.MultiThreading with LinkedList
Мой связанный список:
struct node
{
int data;
struct node *next;
}
void search(int num)
{
int flag = 0;
struct node *temp;
temp = start;
while(temp!=NULL)
{
if(temp->data == num)
return(temp); //Found
temp = temp->next;
}
if(flag == 0)
return(start); // Not found
}
void insert(int num)
{
int c=0;
struct node *temp;
temp=head;
if(temp==NULL)
{
add(num);
}
else
{
while(temp!=NULL)
{
if(temp->data<num)
c++;
temp=temp->next;
}
if(c==0)
add(num);
else if(c<count())
addafter(num,++c);
else
append(num);
}
}
int delete(int num)
{
struct node *temp, *prev;
temp=head;
while(temp!=NULL)
{
if(temp->data==num)
{
if(temp==head)
{
head=temp->next;
free(temp);
return 1;
}
else
{
prev->next=temp->next;
free(temp);
return 1;
}
}
else
{
prev=temp;
temp= temp->next;
}
}
return 0;
}
Если кто-то может показать мне путь, как это сделать с потоками и мьютекса я буду очень благодарен
У вас уже есть код для трех функций. Попробуйте поместить их в поток. Используйте мьютекс для защиты критических разделов. – Jerry
Заметка, как поиск возвращает что-нибудь? Это пустота. –
Вы испортили название своего списка. В одной функции вы используете 'start', в то время как в других вы используете' head'. Возможно, вы не должны использовать глобальные переменные для своего списка вообще. – Gerhardh