Bagikan melalui


<condition_variable>

Menentukan kelas condition_variable dan condition_variable_any yang digunakan untuk membuat objek yang menunggu kondisi menjadi benar.

Header ini menggunakan Concurrency Runtime (ConcRT) sehingga Anda dapat menggunakannya bersama dengan mekanisme ConcRT lainnya. Untuk informasi selengkapnya tentang ConcRT, lihat Concurrency Runtime.

Persyaratan

Header:<condition_variable>

Namespace: std

Catatan

Dalam kode yang dikompilasi dengan menggunakan /clr, header ini diblokir.

Keterangan

Kode yang menunggu variabel kondisi juga harus menggunakan mutex. Utas panggilan harus mengunci mutex sebelum memanggil fungsi yang menunggu variabel kondisi. mutex kemudian dikunci ketika fungsi yang disebut kembali. mutex tidak dikunci saat utas menunggu kondisi menjadi benar. Sehingga tidak ada hasil yang tidak dapat diprediksi, setiap utas yang menunggu variabel kondisi harus menggunakan objek yang sama mutex .

Objek jenis condition_variable_any dapat digunakan dengan mutex dari jenis apa pun. Jenis mutex yang digunakan tidak harus menyediakan try_lock metode . Objek jenis condition_variable hanya dapat digunakan dengan mutex jenis unique_lock<mutex>. Objek jenis ini mungkin lebih cepat daripada objek jenis condition_variable_any<unique_lock<mutex>>.

Untuk menunggu peristiwa, pertama-tama kunci mutex, lalu panggil salah wait satu metode pada variabel kondisi. Panggilan wait memblokir hingga utas lain menandakan variabel kondisi.

Bangun yang memacu terjadi ketika utas yang menunggu variabel kondisi menjadi tidak diblokir tanpa pemberitahuan yang sesuai. Untuk mengenali bangunan yang melelahkan seperti itu, kode yang menunggu kondisi menjadi benar harus secara eksplisit memeriksa kondisi tersebut ketika kode kembali dari fungsi tunggu. Ini biasanya dilakukan dengan menggunakan perulangan; Anda dapat menggunakan wait(unique_lock<mutex>& lock, Predicate pred) untuk melakukan perulangan ini untuk Anda.

while (condition is false)
    wait for condition variable;

Kelas condition_variable_any dan condition_variable masing-masing memiliki tiga metode yang menunggu kondisi.

  • wait menunggu periode waktu yang tidak terbatas.

  • wait_untilmenunggu hingga .time

  • wait_formenunggu .time interval

Masing-masing metode ini memiliki dua versi yang kelebihan beban. Satu hanya menunggu dan bisa bangun dengan tajam. Yang lain mengambil argumen templat tambahan yang menentukan predikat. Metode ini tidak kembali sampai predikatnya adalah true.

Setiap kelas juga memiliki dua metode yang digunakan untuk memberi tahu variabel kondisi bahwa kondisinya adalah true.

  • notify_one membangunkan salah satu utas yang menunggu variabel kondisi.

  • notify_all membangunkan semua utas yang menunggu variabel kondisi.

Fungsi dan Enum

void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);

enum class cv_status { no_timeout, timeout };

Lihat juga

Referensi File Header
Kelas condition_variable
Kelas condition_variable_any