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 順序移至下一個寫入器。 這個鎖定偏向于作家,而且可以在連續的寫入器負載下餓死讀者。

另請參閱

concurrency 命名空間
critical_section 類別