linkedlistへの共有アクセスを持つスレッドを3つ作成する必要があります。検索、追加、スレッドの削除です。リストを介してブラウズのみをスレッドにする。スレッドを追加すると、リストの最後に項目が追加され、それらは相互排他的(mutexによって保護されています)ですが、同時に検索したり追加したりすることができます。スレッドを削除すると、リストの任意のポイントからアイテムが削除され、追加と検索でmutal排他的になります。LinkedListを使用したMultiThreading
マイリンクリスト:
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;
}
誰もが道どのようにスレッドと私はあなたがpthread.hのを使用していると仮定すると、
すでに3つの機能のコードがあります。それぞれをスレッドに入れてみてください。クリティカルセクションを保護するには、mutexを使用します。 – Jerry
注記、検索は何を返すのですか?それは無効です。 –
あなたはあなたのリスト名を混乱させました。ある関数では 'start'を使いますが、他の関数では' head'を使います。たぶんあなたのリストにグローバル変数を使用しないでください。 – Gerhardh