程序说明:
线程a,b分别从字符串eg中取出一个字符,赋值给字符指针pro.
线程c,d分别从pro中取出字符,并打印
程序用读写锁对线程abcd进行同步
用到的读写锁函数有:
#includeint pthread_rwlock_rdlock(pthread_rwlock_t *rwptr); int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr); int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);
#include#include #include #include #define RDNUM 2#define WRNUM 2char 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
运行结果: