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解構函式 | reader_writer_lock 終結物件。 |
公用方法
名稱 | 描述 |
---|---|
lock | 取得讀取器寫入器鎖定做為寫入器。 |
lock_read | 以讀取器身分取得讀取器寫入器鎖定。 如果有寫入器,使用中的讀者必須等到完成。 讀取器只會註冊鎖定的興趣,並等候寫入器釋放它。 |
try_lock | 嘗試以寫入器身分取得讀取器寫入器鎖定,而不會封鎖。 |
try_lock_read | 嘗試以讀取器的形式取得讀取器寫入器鎖定,而不會封鎖。 |
unlock | 根據鎖定讀取器、讀取器或寫入器來解除鎖定讀取器寫入器鎖定。 |
備註
如需詳細資訊,請參閱 同步處理數據結構。
繼承階層架構
reader_writer_lock
需求
標頭: concrt.h
命名空間: concurrency
lock
取得讀取器寫入器鎖定做為寫入器。
void lock();
備註
使用 scoped_lock 建構,以例外狀況安全的方式取得和釋放reader_writer_lock
物件,通常比較安全。
寫入器嘗試取得鎖定後,後續任何讀取器都會封鎖,直到寫入器成功取得及釋放鎖定為止。 這個鎖定偏向於作家,而且可以在連續的寫入器負載下餓死讀者。
寫入器會鏈結,讓結束鎖定的寫入器會以行方式釋放下一個寫入器。
如果呼叫內容已經保留鎖定, 則會擲回improper_lock 例外狀況。
lock_read
以讀取器身分取得讀取器寫入器鎖定。 如果有寫入器,使用中的讀者必須等到完成。 讀取器只會註冊鎖定的興趣,並等候寫入器釋放它。
void lock_read();
備註
使用scoped_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
。
unlock
根據鎖定讀取器、讀取器或寫入器來解除鎖定讀取器寫入器鎖定。
void unlock();
備註
如果有寫入器等候鎖定,鎖定的釋放一律會依 FIFO 順序移至下一個寫入器。 這個鎖定偏向於作家,而且可以在連續的寫入器負載下餓死讀者。