speculative_spin_rw_mutex 类似于 spin_rw_mutex,但满足以下条件时,可能吞吐量较高:
- 处理器支持HTM
如果处理器不支持HTM那么还是用spin_rw_mutex吧。
满足了读写锁的要求,含有一个成员类:scoped_lock,通过scoped_lock的成员函数acquire()来获取一个锁,传入true和false分别表示写锁和读锁。
具体如下:
#include <tbb/spin_rw_mutex.h>
#include <iostream>
#include <vector>
#include <thread>
using namespace std;
int a = 0;
tbb::spin_rw_mutex mtx;
// 如果处理器支持HTM,那么请使用:tbb::speculative_spin_rw_mutex mtx;
void read1() {
tbb::spin_rw_mutex::scoped_lock rlock;
rlock.acquire(mtx, false); // 传入false表示这是一个读锁
cout << a << endl;
rlock.release();
}
void write1() {
tbb::spin_rw_mutex::scoped_lock wlock;
wlock.acquire(mtx); // 默认为写锁
for (int i = 0; i < 100000; i++) a++;
wlock.release();
}
int main() {
vector<thread> threads;
threads.reserve(static_cast<size_t>(10));
for (int i = 0; i < 10; ++i) {
threads.emplace_back(write1);
}
for (auto &t : threads) {
t.join();
}
read1();
}