/*
案例:8个线程操作同一个全局变量
3个线程不定时写这个全局变量,5个线程不定时读这个全局变量
*/
#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int num =1;
pthread_rwlock_t rwlock;
void* writeNum(void * arg){
while(1){
pthread_rwlock_wrlock(&rwlock);
num++;
printf("++write tid:%ld,num:%d\n",pthread_self(),num);
pthread_rwlock_unlock(&rwlock);
usleep(1000);
}
return NULL;
}
void * readNum(void * arg){
while(1){
pthread_rwlock_rdlock(&rwlock);
printf("++read tids:%ld,num:%d\n",pthread_self(),num);
pthread_rwlock_unlock(&rwlock);
usleep(1000);
}
return NULL;
}
int main(){
pthread_rwlock_init(&rwlock,NULL);
pthread_t wtids[3],rtids[5];
for(int i =0;i<3;i++){
pthread_create(&wtids[i],NULL,writeNum,NULL);
}
for(int i =0;i<5;i++){
pthread_create(&rtids[i],NULL,readNum,NULL);
}
for(int i =0;i<3;i++){
pthread_detach(wtids[i]);
}
for(int i =0;i<5;i++){
pthread_detach(rtids[i]);
}
pthread_rwlock_destroy(&rwlock);
pthread_exit(NULL);
return 0;
}
读写锁实例
于 2023-03-11 11:33:54 首次发布