reader_writer_lock 类

具有仅限本地旋转的基于编写器首选队列的读取器-编写器锁。 锁授予对编写器的先进先出 (FIFO) 访问权限,并在出现编写器持续负载的情况下停止读取器。

语法

class reader_writer_lock;

成员

公共类

名称 描述
reader_writer_lock::scoped_lock 类 异常安全 RAII 包装器,可用于以编写者身份获取 reader_writer_lock 锁对象。
reader_writer_lock::scoped_lock_read 类 异常安全 RAII 包装器,可用于以读者身份获取 reader_writer_lock 锁对象。

公共构造函数

名称 描述
reader_writer_lock 构造新的 reader_writer_lock 对象。
~reader_writer_lock Destructor 销毁 reader_writer_lock 对象。

公共方法

名称 描述
lock 以编写者身份获取读写锁。
lock_read 以读者身份获取读写锁。 如果存在编写者,则活跃读者必须等到编写者完成工作。 读者只注册对锁的一个兴趣,并等待编写者释放它。
try_lock 尝试在无阻塞的情况下以编写者身份获取读写锁。
try_lock_read 尝试在无阻塞的情况下以读者身份获取读写锁。
unlock 基于锁定者身份(是读者还是编写者)解锁读写锁。

备注

有关详细信息,请参阅同步数据结构

继承层次结构

reader_writer_lock

要求

标头:concrt.h

命名空间: 并发

lock

以编写者身份获取读写锁。

void lock();

备注

利用 scoped_lock 构造,以编写者身份通过异常安全方式获取和释放 reader_writer_lock 对象通常更安全。

在编写器尝试获取锁后,在编写器成功获取和释放该锁之前任何将来的读取器都将阻塞。 这种锁偏向编写者,可以让读者在编写者连续的负载下无资源可用。

编写者是相互关联的,这样退出锁的编写者就可释放队列中的下一个编写者。

如果调用上下文已持有锁,则会引发 improper_lock 异常。

lock_read

以读者身份获取读写锁。 如果存在编写者,则活跃读者必须等到编写者完成工作。 读者只注册对锁的一个兴趣,并等待编写者释放它。

void lock_read();

注解

利用 构造,以读者身份通过异常安全方式获取和释放 reader_writer_lock 对象通常更安全。

如果有编写者正在等待锁,则读者将一直等待,直到队列中的所有编写者都已获取并释放锁。 这种锁偏向编写者,可以让读者在编写者连续的负载下无资源可用。

reader_writer_lock

构造新的 reader_writer_lock 对象。

reader_writer_lock();

~reader_writer_lock

销毁 reader_writer_lock 对象。

~reader_writer_lock();

备注

析构函数运行时,应不再持有锁。 若在仍持有锁的情况下允许析构读写锁,则会导致未定义的行为。

reader_writer_lock::scoped_lock 类

异常安全 RAII 包装器,可用于以编写者身份获取 reader_writer_lock 锁对象。

class scoped_lock;

scoped_lock::scoped_lock

构造 scoped_lock 对象,并获取在 _Reader_writer_lock 参数中以编写者身份传递的 reader_writer_lock 对象。 如果该锁由另一个线程持有,则此调用将被阻止。

explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);

参数

_Reader_writer_lock
要以编写者身份获取的 reader_writer_lock 对象。

scoped_lock::~scoped_lock

销毁 reader_writer_lock 对象并释放其构造函数中提供的锁。

~scoped_lock();

reader_writer_lock::scoped_lock_read 类

异常安全 RAII 包装器,可用于以读者身份获取 reader_writer_lock 锁对象。

class scoped_lock_read;

scoped_lock_read::scoped_lock_read

构造 scoped_lock_read 对象,并获取在 _Reader_writer_lock 参数中以读者身份传递的 reader_writer_lock 对象。 如果该锁由另一个线程以编写者身份持有或存在挂起的编写者,则此调用将被阻止。

explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);

参数

_Reader_writer_lock
要以读者身份获取的 reader_writer_lock 对象。

reader_writer_lock::scoped_lock_read::~scoped_lock_read 析构函数

销毁 scoped_lock_read 对象并释放其构造函数中提供的锁。

~scoped_lock_read();

try_lock

尝试在无阻塞的情况下以编写者身份获取读写锁。

语法

bool try_lock();

返回值

如果获取了锁,则为值 true,否则为值 false

try_lock_read

尝试在无阻塞的情况下以读者身份获取读写锁。

bool try_lock_read();

返回值

如果获取了锁,则为值 true,否则为值 false

解锁

基于锁定者身份(是读者还是编写者)解锁读写锁。

void unlock();

注解

如果有正在等待锁的编写者,则释放锁的操作将始终由下一个编写者执行(按 FIFO 顺序)。 这种锁偏向编写者,可以让读者在编写者连续的负载下无资源可用。

另请参阅

并发命名空间
critical_section 类