#include <iostream>
#include <pthread.h>
#include <unistd.h>
int Money = 0;
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
void* readThread(void* argv)
{
pthread_rwlock_rdlock(&rwlock);
printf("tid is: %d, have money:%ld \n",pthread_self(),Money);
sleep(4);
pthread_rwlock_unlock(&rwlock);
return NULL;
}
void* writeThread(void* argv)
{
printf("emmmmm, I am in writeThread:%ld \n",pthread_self());
pthread_rwlock_wrlock(&rwlock);
printf("I am writing Money\n");
Money+=1;
sleep(4);
pthread_rwlock_unlock(&rwlock);
return NULL;
}
int main() {
pthread_t pid[5];
for (int i = 0; i < 4; ++i) {
pthread_create(&pid[i],NULL,readThread,NULL);
}
pthread_create(&pid[4],NULL,writeThread,NULL);
for (int j = 0; j <5 ; ++j) {
pthread_join(pid[j],NULL);
}
return 0;
}
读写锁适用于多个读,单个或者少量写操作。读写锁就是在读锁?的时候 写不能获得锁定,将会阻塞等待读操作完成,才能获得写锁,但是当别的读进来时候依然可以获得读锁。当写锁定时,读锁无法获得,别的写锁也会被阻塞,只有等写锁释放的时候读锁才能得到。总之 读时候不能写但是可以有多个读,写时读和写都阻塞。当然如果不想进入阻塞你也可以使用带try的lock