Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.