概述
程序说明:
线程a,b分别从字符串eg中取出一个字符,赋值给字符指针pro.
线程c,d分别从pro中取出字符,并打印
程序用读写锁对线程abcd进行同步
用到的读写锁函数有:
#include<pthread.h> int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr); int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr); int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);
#include <stdio.h> #include <stdlib.h> #include<pthread.h> #include<string.h> #define RDNUM 2 #define WRNUM 2 char eg[]="I'm a test!"; char *pro; struct { int i; pthread_rwlock_t mutex; }shared={ 0,PTHREAD_RWLOCK_INITIALIZER }; void pthw(){ int len=strlen(eg)+1; int write_num=0; for(;;){ pthread_rwlock_wrlock(&shared.mutex); if(shared.i>=len) { pthread_rwlock_unlock(&shared.mutex); break; } pro[shared.i]=eg[shared.i]; shared.i++; write_num++; pthread_rwlock_unlock(&shared.mutex); sleep(1); } printf("进程%lu写了%d个字符n",pthread_self(),write_num); } void pthr(){ int len=strlen(eg)+1; int read_num=0; for(;;){ pthread_rwlock_rdlock(&shared.mutex); if(shared.i>=len&&read_num==len) { pthread_rwlock_unlock(&shared.mutex); break; } while(read_num<shared.i){ printf("进程%lu读了%cn",pthread_self(),pro[read_num]); read_num++; } pthread_rwlock_unlock(&shared.mutex); } } int main(void) { pthread_t rd[RDNUM],wr[WRNUM]; int i; int len=strlen(eg)+1; pro=(char*)malloc(sizeof(char)*(len+1)); for(i=0;i<WRNUM;i++){ pthread_create(&wr[i],NULL,pthw,NULL); } for(i=0;i<RDNUM;i++){ pthread_create(&rd[i],NULL,pthr,NULL); } for(i=0;i<WRNUM;i++){ pthread_join(wr[i],NULL); } for(i=0;i<RDNUM;i++){ pthread_join(rd[i],NULL); } free(pro); puts("!!!Hello World!!!"); return EXIT_SUCCESS; }
运行结果:
转载于:https://www.cnblogs.com/sklww/p/3496745.html
最后
以上就是腼腆帽子为你收集整理的读写锁的例子的全部内容,希望文章能够帮你解决读写锁的例子所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复