2010-12-12 15 views
15

İki iş parçacığı olduğunu, ana iş parçacığı olduğunu ve B iş parçacığı olduğunu (ana tarafından oluşturulan) varsayalım. B bir muteks (pthread_mutex) aldıysa ve kilidin kilidini açmadan pthread_exit çağrısında bulundu. Peki muteks'e ne oluyor? Özgür mü?Kazanılan iş parçacığı çıktığında Mutex'e ne olur?

cevap

14

nope. Muteks kilitli kalır. Ne aslında böyle bir kilit olur kendi türüne bağlıdır, sen pthread_mutex_init çağırmadan önce sağ özelliklerini kurarak sağlam muteksi oluşturduysa here veya here

+0

Merci Beaucoup !!! Çok teşekkürler !!! – Sadish

+0

Başka bir iplik, sağlam bir muteks olmadıkça kilidini açamaz. –

+0

Whoa, iş parçacığı afinitesi olmayan bir 'mutex'? "Terkedilmiş" hata durumu yok mu? –

10

muteksi zaman özel bir duruma geçer de okuyabilirsin kilidi tutan iş parçacığı sonlanır ve muteks elde etmek için sonraki iş parçacığı bir EOWNERDEAD hatası alır. Daha sonra muteksin korunmasını ve muteks'in tekrar kullanılabilir hale gelmesini veya pthread_mutex_unlock'u çağırmasını (muteks'i kalıcı olarak kullanılamaz hale getirecek, daha fazla girişimi ENOTRECOVERABLE döndürecektir) arayarak, mutex'in hangi durumdan korunduğunu temizlemek ve temizlemekle sorumludur.

Sağlam olmayan mutekslerde, kilitlenen iplik kilitlenmeden sona ererse muteks kalıcı olarak kullanılamaz durumdadır. Standart başına (Austin Group izleyicisindeki issue 755 çözünürlüğüne bakın), muteks kilitli kalmaya devam eder ve resmi mülkiyeti çıkılan iş parçasına ait olmaya devam eder ve kilitlemeye çalışan herhangi bir iş parçacığı kilitlenmez. Başka bir iş parçacığı kilidini açmaya çalışırsa, bu normal olarak tanımsız bir davranıştır, muteks PTHREAD_MUTEX_ERRORCHECK özniteliği ile oluşturulmadıkça, bir hata döndürülür. Diğer taraftan, çoğu (çoğu?) Gerçek-dünya uygulaması gerçekte standardın gereklerini yerine getirmemektedir. Farklı bir iş parçacığından mutex'i kilitleme veya kilidini açma girişimi, sahte kimlik (sahipliğini izlemek için kullanılır) yeniden kullanılmış olabileceğinden ve şimdi farklı bir iş parçacığına (muhtemelen yeni kilitleme/kilit açma isteğini yapan kişi) başvurabileceğinden, sahte bir şekilde başarılı olabilir. En azından glibc'nin NPTL'sinin bu davranışı sergilediği bilinmektedir.

İlgili konular