Aracılığıyla paylaş


<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ı mutexgerekir. Ç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 belirtilene timekadar bekler.

  • wait_for belirtilen time intervalbir 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 truekadar 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ı