#include <iostream>
#include <threads.h>
#include <unistd.h>
using namespace std;
struct Node
{
int num;
Node *next;
};
pthread_mutex_t mutex;
pthread_cond_t cond1;
pthread_cond_t cond2;
Node *head = (Node*) malloc(sizeof(Node));
int num_size;
void *add(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
cout<<"this is son thread of add"<<endl;
Node *node = (Node*) malloc(sizeof(Node));
node->num = random()%100;
node->next = head->next;
cout<<"add num :"<<node->num<<endl;
head->next = node;
num_size++;
cout<<"num size = "<<num_size<<endl<<endl;
pthread_mutex_unlock(&mutex);
pthread_cond_broadcast(&cond1);
sleep(1);
}
}
void *deleted(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
while(head->next == NULL)
{
pthread_cond_wait(&cond1,&mutex);
}
cout<<"this is son thread of delete"<<endl;
cout<<"delete num"<<head->next->num<<endl<<endl;
Node * temp = head->next;
head->next = head->next->next;
delete(temp);
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main() {
pthread_t pid_add[3];
pthread_t pid_deleted[5];
head->num = 0;
head->next = NULL;
num_size = 0;
for(int i = 0;i<3;i++)
{
pthread_create(&pid_add[i],NULL,add,NULL);
}
for(int i = 0;i<5;i++)
{
pthread_create(&pid_deleted[i],NULL,deleted,NULL);
}
for(int i = 0;i<3;i++)
{
pthread_join(pid_add[i],NULL);
}
for(int i = 0;i<5;i++)
{
pthread_join(pid_deleted[i],NULL);
}
}