#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int s_num = 0;
pthread_rwlock_t slock;
void *thread_fun(void *arg)
{
while(1)
{
pthread_rwlock_rdlock(&slock);
printf("======> %ld thread s_num=%d\n", reinterpret_cast<long>(arg), s_num);
pthread_rwlock_unlock(&slock);
usleep(100000);
}
return NULL;
}
int main(int argc, char *argv[])
{
pthread_rwlock_init(&slock, NULL);
for (long i=0; i<5; i++)
{
pthread_t th;
int ret = pthread_create(&th, NULL,
thread_fun, reinterpret_cast<void *>(i));
if (ret < 0)
{
printf("pthread_create error\n");
return 0;
}
pthread_detach(th);
}
while(1)
{
pthread_rwlock_wrlock(&slock);
printf("======>write s_num=%d\n", s_num++);
pthread_rwlock_unlock(&slock);
usleep(500000);
}
}