c++11 的 读写锁
时间: 2024-06-09 07:12:25 浏览: 179
C++ 读写锁
C11标准中提供了读写锁(read-write lock)的机制,可以在多线程环境下实现对共享资源的读写控制。读写锁可以分为读锁和写锁,读锁可以被多个线程同时持有,但是写锁只能被一个线程独占。读写锁的基本操作包括:
1. 初始化:pthread_rwlock_init()
2. 加读锁:pthread_rwlock_rdlock()
3. 加写锁:pthread_rwlock_wrlock()
4. 解锁:pthread_rwlock_unlock()
5. 销毁:pthread_rwlock_destroy()
下面是一个简单的使用读写锁的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_rwlock_t rwlock;
int shared_data = 0;
void *reader(void *arg)
{
pthread_rwlock_rdlock(&rwlock);
printf("Reader %ld: shared_data = %d\n", (long)arg, shared_data);
pthread_rwlock_unlock(&rwlock);
return NULL;
}
void *writer(void *arg)
{
pthread_rwlock_wrlock(&rwlock);
shared_data++;
printf("Writer %ld: shared_data = %d\n", (long)arg, shared_data);
pthread_rwlock_unlock(&rwlock);
return NULL;
}
int main()
{
pthread_t threads[6];
pthread_rwlock_init(&rwlock, NULL);
for (long i = 0; i < 2; i++) {
pthread_create(&threads[i], NULL, writer, (void *)i);
}
for (long i = 2; i < 6; i++) {
pthread_create(&threads[i], NULL, reader, (void *)i);
}
for (int i = 0; i < 6; i++) {
pthread_join(threads[i], NULL);
}
pthread_rwlock_destroy(&rwlock);
return 0;
}
```
在这个例子中,共有两个写线程和四个读线程。写线程负责增加共享数据的值,读线程负责读取共享数据的值。在写线程加写锁的时候,读线程会被阻塞;在读线程加读锁的时候,其他读线程可以同时持有读锁,但是写线程会被阻塞。
阅读全文