#include <iostream>
#include <pthread.h>
#include <unistd.h>
using namespace std;
pthread_rwlock_t rwlock;
int num;
void* read_num(void* arg)
{
while(num<1500)
{
pthread_rwlock_rdlock(&rwlock);
cout<<"read thread -- num= "<<num<<endl;
pthread_rwlock_unlock(&rwlock);
sleep(1);
}
}
void* write_num(void* arg)
{
while(num<1500)
{
pthread_rwlock_wrlock(&rwlock);
num++;
cout<<"write thread -- num= "<<num<<endl;
pthread_rwlock_unlock(&rwlock);
sleep(1);
}
}
int main()
{
num = 0;
pthread_t wr_pid[3];
pthread_t rd_pid[5];
pthread_rwlock_init(&rwlock,NULL);
for(int i = 0;i<3;i++)
{
pthread_create(&wr_pid[i],NULL,write_num,NULL);
}
for(int i = 0;i<5;i++)
{
pthread_create(&rd_pid[i],NULL,read_num,NULL);
}
for(int i = 0;i<3;i++)
{
pthread_join(wr_pid[i],NULL);
}
for(int i = 0;i<5;i++)
{
pthread_join(rd_pid[i],NULL);
}
}