Bagikan melalui


Kelas condition_variable

condition_variable Gunakan kelas untuk menunggu peristiwa saat Anda memiliki mutex jenis unique_lock<mutex>. Objek jenis ini mungkin memiliki performa yang lebih baik daripada objek jenis condition_variable_any unique_lock mutex>>.<<

Sintaks

class condition_variable;

Anggota

Konstruktor

Nama Deskripsi
condition_variable Membuat condition_variable objek.

Fungsi

Nama Deskripsi
native_handle Mengembalikan jenis khusus implementasi yang mewakili handel condition_variable.
notify_all Membuka blokir semua utas yang menunggu condition_variable objek.
notify_one Membuka blokir salah satu utas yang sedang menunggu condition_variable 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

Membuat condition_variable objek.

condition_variable();

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.

native_handle

Mengembalikan jenis khusus implementasi yang mewakili handel condition_variable.

native_handle_type native_handle();

Tampilkan Nilai

native_handle_type didefinisikan sebagai penunjuk ke struktur data internal Concurrency Runtime.

notify_all

Membuka blokir semua utas yang menunggu condition_variable objek.

void notify_all() noexcept;

notify_one

Membuka blokir salah satu utas yang menunggu pada condition_variable objek.

void notify_one() noexcept;

tunggu

Memblokir utas.

void wait(unique_lock<mutex>& Lck);

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

Parameter

Lck
Objek mutex> unique_lock<.

Pred
Ekspresi apa pun yang mengembalikan true atau false.

Keterangan

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

Akibatnya, metode kedua menjalankan kode berikut.

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

wait_for

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

template <class Rep, class Period>
cv_status wait_for(
    unique_lock<mutex>& Lck,
    const chrono::duration<Rep, Period>& Rel_time);

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

Parameter

Lck
Objek mutex> unique_lock<.

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 objek disinyalir oleh panggilan ke notify_one atau notify_all atau sampai interval waktu Rel_time berlalu. Ini juga bisa terbangun dengan memuaskan.

Akibatnya, metode kedua 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 Clock, class Duration>
cv_status wait_until(
    unique_lock<mutex>& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time);

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

cv_status wait_until(
    unique_lock<mutex>& Lck,
    const xtime* Abs_time);

template <class Predicate>
bool wait_until(
    unique_lock<mutex>& Lck,
    const xtime* Abs_time,
    Predicate Pred);

Parameter

Lck
Objek mutex> unique_lock<.

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.

Akibatnya, metode kedua 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.

Lihat juga

Referensi File Header
<condition_variable>