//read write lock #include<stdio.h> #include<unistd.h> #include<pthread.h> struct test { char a[10]; char b[10]; char c[10]; }yb = {"111","222","33333"}; static int j=0; pthread_rwlock_t mutex_1; void Print1(struct test *arg) { pthread_rwlock_rdlock(&mutex_1); printf("a=%s,b=%s,c=%s,d=%X,j=%d ",arg->a,arg->b,arg->c,pthread_self(),j++); sleep(2); pthread_rwlock_unlock(&mutex_1); pthread_exit((void *)j); printf("Never Coming. "); } struct test *Print2(struct test *arg) { pthread_rwlock_wrlock(&mutex_1); struct test *p = NULL; p = arg; memcpy(p->a,"fff",3); memcpy(p->b,"ggg",3); memcpy(p->c,"ttt",3); pthread_rwlock_unlock(&mutex_1); pthread_exit((void *)0); } int main() { pthread_t pid1,pid2,pid3,pid4; void *set; pthread_rwlock_init(&mutex_1,NULL); pthread_create(&pid1,NULL,&Print1,&yb); sleep(1); pthread_create(&pid2,NULL,&Print2,&yb); pthread_create(&pid3,NULL,&Print1,&yb); sleep(10); pthread_create(&pid4,NULL,&Print1,&yb); pthread_join(pid1,&set); printf("pid1 exit coed %d ",(int)set); pthread_join(pid2,&set); printf("pid2 exit coed %d ",(int)set); pthread_join(pid3,&set); printf("pid3 exit coed %d ",(int)set); pthread_join(pid4,&set); printf("pid4 exit coed %d ",(int)set); pthread_rwlock_destroy(&mutex_1); sleep(1); return 0; }