İ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
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.
- 1. Eşzamansız sonucu işlemek için IO iş parçacığı yoksa ne olur?
- 2. Bildirim() çağrılmıyorsa bekleyen iş parçacığına ne olur?
- 3. iş parçacığı içinde yerel depolama iş parçacığı
- 4. İş parçacığı tanıtıcısı iş parçacığı tanıtıcısı
- 5. iş parçacığı
- 6. Görev kullanırken ThreadPool dolu/meşgulse ne olur?
- 7. Epoll iş parçacığı güvenli midir?
- 8. İş parçacığı, iki iş parçacığı arasındaki iletişim C#
- 9. İşleyici vs İş parçacığı
- 10. WPF iş parçacığı C#
- 11. CountdownTimer UI iş parçacığı güncelleştiren çalışan iş parçacığı içinde
- 12. UI iş parçacığı üzerinde görev sürdürme, arka plan iş parçacığı
- 13. Bir iş parçacığı veya iş parçacığı için bir DAO DAO?
- 14. Windows iş parçacığı havuzu ve CLR iş parçacığı havuzu
- 15. Qt: Arka plan iş parçacığı yenileme UI iş parçacığı
- 16. Django/sqlite3 "OperationalError: iş parçacığı yok" iş parçacığı üzerinde
- 17. Tomcat iş parçacığı havuzundaki iş parçacığı sayısı nasıl artırılır?
- 18. python iş parçacığı oluşturmayacak mı?
- 19. Hatalı iş parçacığı
- 20. Kinect ile iş parçacığı
- 21. Posix iş parçacığı öğretici
- 22. Python iş parçacığı dökümü
- 23. İş parçacığı durduruluyor
- 24. gdb - iş parçacığı günlüğü
- 25. UI'dan ayrı iş parçacığı
- 26. iş parçacığı afinitesi
- 27. İş parçacığı güvenli Queue
- 28. Bir "gerçek" iş parçacığı
- 29. Maksimum iş parçacığı sorunu
- 30. Ayrı iş parçacığı içinde
Merci Beaucoup !!! Çok teşekkürler !!! – Sadish
Başka bir iplik, sağlam bir muteks olmadıkça kilidini açamaz. –
Whoa, iş parçacığı afinitesi olmayan bir 'mutex'? "Terkedilmiş" hata durumu yok mu? –