<condition_variable>
Bir koşulun doğru olmasını bekleyen nesneler oluşturmak için kullanılan condition_variable ve condition_variable_any sınıflarını tanımlar.
Bu üst bilgi, diğer ConcRT mekanizmalarıyla birlikte kullanabilmeniz için Eşzamanlılık Çalışma Zamanı 'nı (ConcRT) kullanır. ConcRT hakkında daha fazla bilgi için bkz . Eşzamanlılık Çalışma Zamanı.
Gereksinimler
Üst Bilgi:<condition_variable>
Ad alanı: std
Not
/clr kullanılarak derlenen kodda bu üst bilgi engellenir.
Açıklamalar
Koşul değişkenlerini bekleyen kodun da kullanması mutex
gerekir. Çağıran iş parçacığı, koşul değişkenini mutex
bekleyen işlevleri çağırmadan önce öğesini kilitlemelidir. mutex
daha sonra çağrılan işlev döndürdüğünde kilitlenir. mutex
İş parçacığı koşulun doğru olmasını beklerken kilitlenmez. Öngörülemeyen sonuçlar olmaması için, bir koşul değişkenini bekleyen her iş parçacığı aynı mutex
nesneyi kullanmalıdır.
Türün nesneleri herhangi bir türde condition_variable_any
bir mutex ile kullanılabilir. Kullanılan mutex türünün yöntemini sağlaması try_lock
gerekmez. Türün condition_variable
nesneleri yalnızca türünde unique_lock<mutex>
bir mutex ile kullanılabilir. Bu türdeki nesneler, türünden condition_variable_any<unique_lock<mutex>>
daha hızlı olabilir.
Bir olayı beklemek için önce mutex'i kilitleyin ve ardından koşul değişkeninde wait
yöntemlerden birini çağırın. Çağrı, wait
başka bir iş parçacığı koşul değişkenine işaret edene kadar engeller.
Koşul değişkenlerini bekleyen iş parçacıkları uygun bildirimler olmadan engeli kaldırıldığında, sahte uyandırmalar oluşur. Bu tür sahte uyandırmaları tanımak için, bir koşulun doğru olmasını bekleyen kod, kod bir bekleme işlevinden döndüğünde bu koşulu açıkça denetlemelidir. Bu genellikle bir döngü kullanılarak yapılır; bu döngünün sizin için gerçekleştirilmesi için kullanabilirsiniz wait(unique_lock<mutex>& lock, Predicate pred)
.
while (condition is false)
wait for condition variable;
condition_variable_any
ve condition_variable
sınıflarının her biri bir koşulu bekleyen üç yönteme sahiptir.
wait
ilişkisiz bir süre bekler.wait_until
belirtilenetime
kadar bekler.wait_for
belirtilentime interval
bir için bekler.
Bu yöntemlerin her biri iki aşırı yüklenmiş sürüme sahiptir. Biri bekler ve mahmuzlu bir şekilde uyanabilir. Diğeri, bir koşulu tanımlayan ek bir şablon bağımsız değişkeni alır. yöntemi koşul olana true
kadar döndürmez.
Her sınıfın, koşul değişkenine koşulu olduğunu bildirmek için kullanılan iki yöntemi de vardır true
.
notify_one
koşul değişkenini bekleyen iş parçacıklarından birini uyandırır.notify_all
koşul değişkenini bekleyen tüm iş parçacıklarını uyandırır.
İşlevler ve Sabit Listeleri
void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);
enum class cv_status { no_timeout, timeout };
Ayrıca bkz.
Üst Bilgi Dosyaları Başvurusu
condition_variable Sınıfı
condition_variable_any Sınıfı