个人测试:
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
char str[100];
pthread_mutex_t mutex_read,mutex_write;
pthread_cond_t cond_read,cond_write;
void* p1_func(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex_read);
pthread_cond_wait(&cond_read,&mutex_read);
printf("\nstr=%s\n",str);
pthread_cond_signal(&cond_write);
pthread_mutex_unlock(&mutex_read);
}
}
void* p2_func(void* arg)
{
int i = 0;
printf("\np2_func\n");
while(1)
{
i++;
if(i%10==0)
{
// printf("\n%d 10\n",i);
pthread_mutex_lock(&mutex_write);
sprintf(str,"lock %d",i);
pthread_cond_signal(&cond_read);
pthread_cond_wait(&cond_write,&mutex_write);
pthread_mutex_unlock(&mutex_write);
}
sleep(1);
printf("\n%d\n",i);
}
}
int main()
{
pthread_t p1;
pthread_t p2;
pthread_mutex_init(&mutex_read,NULL);
pthread_cond_init(&cond_read,NULL);
pthread_mutex_init(&mutex_write,NULL);
pthread_cond_init(&cond_write,NULL);
pthread_create(&p1,NULL,p1_func,NULL);
pthread_create(&p2,NULL,p2_func,NULL);
pthread_join(p1,NULL);
pthread_join(p2,NULL);
pthread_mutex_destroy(&mutex_read);
pthread_cond_destroy(&cond_read);
pthread_mutex_destroy(&mutex_write);
pthread_cond_destroy(&cond_write);
return 0;
}