#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义读写锁
pthread_rwlock_t rwlock;
int main(int argc, char *argv[])
{
if(argc < 3){
printf("-usage:%s [r|w] [r|w]\n", argv[0]);
exit(1);
}
//读写锁初始化
pthread_rwlock_init(&rwlock, NULL);
if(!strcmp("r", argv[1])){
//加读锁
if(pthread_rwlock_rdlock(&rwlock) != 0){
printf("first read lock failure\n");
}else{
printf("first read lock success\n");
}
}else if(!strcmp("w", argv[1])){
//加写锁
if(pthread_rwlock_wrlock(&rwlock) != 0){
printf("first write lock failure\n");
}else{
printf("first write lock success\n");
}
}
if(!strcmp("r", argv[2])){
//加读锁
if(pthread_rwlock_rdlock(&rwlock) != 0){
printf("second read lock failure\n");
}else{
printf("second read lock success\n");
}
}else if(!strcmp("w", argv[2])){
//加写锁
if(pthread_rwlock_wrlock(&rwlock) != 0){
printf("second write lock failure\n");
}else{
printf("second write lock success\n");
}
}
//释放读写锁
pthread_rwlock_unlock(&rwlock);
pthread_rwlock_unlock(&rwlock);
return 0;
}
运行结果
xfliu@ubuntu:读写锁$ ./bin/1 r r
first read lock success
second read lock success
xfliu@ubuntu:读写锁$ ./bin/1 r w
first read lock success
^C^C
xfliu@ubuntu:读写锁$ ./bin/1 w r
first write lock success
second read lock failure
非法指令 (核心已转储)
xfliu@ubuntu:读写锁$ ./bin/1 w w
first write lock success
second write lock failure
非法指令 (核心已转储)
xfliu@ubuntu:读写锁$
总结:
只有读读的时候才不会报错