shared_mutex
(也称为共享互斥锁或读写锁)是一种特殊类型的互斥锁,用于允许多个线程同时读取共享数据,但在写入期间只允许一个线程进行写入。
在读取共享数据时,多个线程可以同时获取共享锁(读锁),这样可以实现并发读取而无需加锁等待。这对于读多写少的情况非常有用,因为读取操作不会相互干扰。
而当某个线程想要写入共享数据时,必须先获取独占锁(写锁),并且在写入期间不允许其他线程读取或写入数据。这样可以确保数据的一致性。
shared_mutex
提供了两种锁定模式:共享模式(shared mode)和独占模式(exclusive mode),它们都允许多个线程并发地获取共享锁,但在获取独占锁时会进行互斥。
共享锁对应 shared_lock<shared_mutex>;独占锁对应lock_guard<shared_mutex>或者unique_lock<shared_mutex>。
//两个锁,一个是读写锁,一个是互斥锁锁屏幕
std::shared_mutex _mutex, _mm;
int sharedData = 0;
void reader()
{
while (true)
{
shared_lock lock(_mutex);
scoped_lock lk(_mm);
cout << this_thread::get_id() << " Reader: " << sharedData << std::endl;
this_thread::sleep_for(chrono::milliseconds(1000));
}
}
void writer()
{
while (true)
{
scoped_lock lock(_mutex);
scoped_lock lk(_mm);
sharedData++;
cout << this_thread::get_id() << " Writer: " << sharedData << std::endl;
this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
int main()
{
std::jthread readerThread1(reader);
std::jthread readerThread2(reader);
std::jthread writerThread(writer);
return 0;
}
Comments NOTHING