Şimdi iş parçacığı güvenli bir şekilde sonlandırmak istediğiniz bir çok iş parçacıklı C++ 03 uygulaması (Linux tabanlı) var.C++ 03'teki bir programdan, iş parçacığı güvenli bir şekilde nasıl çıkılır?
exit(0) kullanmayı denedim, ancak bu işlem başka bir iş parçacığı tarafından aktif olarak kullanılan bazı statik değişkenleri yok ederek, bu iş parçacığının serbest belleğe ve yok edilen nesnelere erişmesine neden olarak bir çekirdek dökümü oluşturuyor! Görünüşe göre, exit() işlevinin bir veri yarışı vardır: "Bu işlevin çağrılması, statik süre olan tüm nesneleri yok eder: Birden çok iş parçacığı çalıştıran bir program, çıkış çağırmaz (statik nesneleri etkilemeyen benzer bir işlev için quick_exit dosyasına bakın)."
C++ 11 bir iş parçacığı güvenliği quick_exit() işlevi sunar. Ama bu büyük uygulamayı şu anda C++ 11'e taşıyabilme yeteneğine sahip değilim.
Ayrıca, temiz sonlandırma/iş parçacıklarının birleştirilmesi için çaba harcamak istemiyorum. Bu çok karmaşık bir programdır ve önemli miktarda iş gerektirecektir.
Başka alternatifler var mı? Programın hemen çıkmasını istiyorum, temizlik yok, çekirdek dökümü yok.
Düzenleme: Gerçekten yapmaya çalıştığım şey, abort() çağrılarını, bir kopyalamaya neden olmayacak bir şeyle değiştirmektir. Ve abort() iş parçacığı güvenlidir, btw.
Başka bir deyişle: Bir kısayol (düzgün kapatma mantığı yok) aldınız ve şimdi pişman oluyorsunuz. – BitTickler
Belki 'kill (getpid(), SIGKILL); '? :) –
Yan not: Pek çoğu kapatma kodunu yazmamaktan hoşlanıyor. Zamanlarını kurtardığını düşünüyorlar. Ama ... o zaman nasıl programda valgrind gibi araçları kullanıyorsun? – BitTickler