Bagikan melalui


Kelas condition_variable_any

Gunakan kelas condition_variable_any untuk menunggu peristiwa yang memiliki jenis apa pun mutex .

Sintaks

class condition_variable_any;

Anggota

Konstruktor

Nama Deskripsi
condition_variable_any Membuat condition_variable_any objek.

Fungsi

Nama Deskripsi
notify_all Membuka blokir semua utas yang menunggu condition_variable_any objek.
notify_one Membuka blokir salah satu utas yang sedang menunggu condition_variable_any objek.
Tunggu Memblokir utas.
wait_for Memblokir utas, dan mengatur interval waktu setelah utas membuka blokir.
wait_until Memblokir utas, dan mengatur titik waktu maksimum di mana utas membuka blokir.

condition_variable_any

Membuat condition_variable_any objek.

condition_variable_any();

Keterangan

Jika memori tidak cukup tersedia, konstruktor melempar objek system_error yang memiliki not_enough_memory kode kesalahan. Jika objek tidak dapat dibangun karena beberapa sumber daya lain tidak tersedia, konstruktor melempar system_error objek yang memiliki resource_unavailable_try_again kode kesalahan.

notify_all

Membuka blokir semua utas yang menunggu condition_variable_any objek.

void notify_all() noexcept;

notify_one

Membuka blokir salah satu utas yang menunggu pada condition_variable_any objek.

void notify_one() noexcept;

tunggu

Memblokir utas.

template <class Lock>
void wait(Lock& Lck);

template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);

Parameter

Lck
Objek mutex dari jenis apa pun.

Pred
Ekspresi apa pun yang mengembalikan true atau false.

Keterangan

Metode pertama memblokir hingga condition_variable_any objek disinyalir oleh panggilan ke notify_one atau notify_all. Ini juga bisa terbangun dengan memuaskan.

Metode kedua yang berlaku menjalankan kode berikut.

while (!Pred())
    wait(Lck);

wait_for

Memblokir utas, dan mengatur interval waktu setelah utas membuka blokir.

template <class Lock, class Rep, class Period>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time);

template <class Lock, class Rep, class Period, class Predicate>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time, Predicate Pred);

Parameter

Lck
Objek mutex dari jenis apa pun.

Rel_time
Objek chrono::duration yang menentukan jumlah waktu sebelum utas bangun.

Pred
Ekspresi apa pun yang mengembalikan true atau false.

Tampilkan Nilai

Metode pertama mengembalikan cv_status::timeout jika penantian berakhir ketika Rel_time telah berlalu. Jika tidak, metode mengembalikan cv_status::no_timeout.

Metode kedua mengembalikan nilai Pred.

Keterangan

Metode pertama memblokir hingga condition_variable_any objek diberi sinyal oleh panggilan ke notify_one atau notify_all, atau sampai interval waktu Rel_time berlalu. Ini juga bisa terbangun dengan memuaskan.

Metode kedua yang berlaku menjalankan kode berikut.

while(!Pred())
    if(wait_for(Lck, Rel_time) == cv_status::timeout)
    return Pred();

return true;

wait_until

Memblokir utas, dan mengatur titik waktu maksimum di mana utas membuka blokir.

template <class Lock, class Clock, class Duration>
void wait_until(Lock& Lck, const chrono::time_point<Clock, Duration>& Abs_time);

template <class Lock, class Clock, class Duration, class Predicate>
void wait_until(
    Lock& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time,
    Predicate Pred);

template <class Lock>
void wait_until(Lock Lck, const xtime* Abs_time);

template <class Lock, class Predicate>
void wait_until(
    Lock Lck,
    const xtime* Abs_time,
    Predicate Pred);

Parameter

Lck
Objek mutex.

Abs_time
Objek chrono::time_point .

Pred
Ekspresi apa pun yang mengembalikan true atau false.

Tampilkan Nilai

Metode yang mengembalikan cv_status jenis kembali cv_status::timeout jika tunggu berakhir saat Abs_time berlalu. Jika tidak, metode mengembalikan cv_status::no_timeout.

Metode yang mengembalikan bool nilai Pred.

Keterangan

Metode pertama memblokir hingga condition_variable objek diberi sinyal oleh panggilan ke notify_one atau notify_all, atau sampai Abs_time. Ini juga bisa terbangun dengan memuaskan.

Metode kedua yang berlaku menjalankan kode berikut.

while(!Pred())
    if(wait_until(Lck, Abs_time) == cv_status::timeout)
    return Pred();

return true;

Metode ketiga dan keempat menggunakan penunjuk ke objek jenis xtime untuk mengganti chrono::time_point objek. Objek xtime menentukan jumlah waktu maksimum untuk menunggu sinyal.