Evet çocuklar, şimdi de bunu tartışalım.
Alt birleştirilebilir iş parçacığı sonlandırıldığında, katılabileceği diğer tüm iş parçacıkları hangileridir?
Çocuk iş parçacığının sonlandırıldığında katılabileceği her zaman ana iş parçacığı mıdır yoksa başka herhangi bir iş parçacığına
da katılabilir mi?
Yani fesih üzerine katılabilir bir alt iş parçacığı.
P iş parçacığı alt çizgi birleştirme API'sinde gerçekten engellenmiş olan tüm iş parçacıklarını birleştirin.
Daha sonra tüm bu iş parçacıklarının bu alt Joinable iş parçacığının sonlandırılmasını beklediği söylenir.
Şimdi bu noktayı bir örnek yardımıyla anlayalım.
Diyelim ki çok iş parçacıklı programınızda her zamanki gibi ana iş parçacığı olarak adlandırılan bir
iş parçacığınız var.
Bu ana iş parçacığının bir çocuk birleştirilebilir iş parçacığı oluşturduğunu varsayalım.
Değil mi?
Ve F çatal noktasıdır.
Şimdi bu alt iş parçacığının başka bir iş parçacığı oluşturduğunu varsayalım ve bu başka iş parçacığını torun iş
parçacığı olarak adlandıralım.
Doğru.
Böylece f çatal noktasından sonraki ana iş parçacığı kendi yürütme akışını yürütmeye devam edecektir.
Çocuk iş parçacığı da F çatal noktasından sonra kendi yürütme akışına devam eder ve torun iş parçacığı
da aynı şeyi yapar.
Doğru.
Şimdi torun iş parçacığının bir API iş parçacığını çağırdığını ve bu torun iş parçacığının da bir API iş parçacığını çağırdığını
varsayalım.
Alt iş parçacığının tutamacındaki alt çizgi birleşimi.
Doğru.
P iplik sapı nedir?
P thread handle, şu anda kodumuzda kullandığımız bu veri yapısından başka bir şey değildir.
Doğru.
Yani şimdi torun iş parçacığı çocuk iş parçacığının sonlandırılmasını veya ölümünü bekliyor.
Benzer şekilde, ana iş parçacığı da alt iş parçacığının tanıtıcısında bir api p iş parçacığı alt çizgi birleştirme çağrısı
yapmıştır.
Yani bu, ana iş parçacığının da alt iş parçacığının sonlandırılmasını beklediği anlamına gelir.
Doğru.
Şimdi J1 ve J2 olmak üzere iki birleşme noktası olduğunu görebilirsiniz.
Şimdi daha ileri giderek, alt iş parçacığının işini tamamladığını ve sonlandığını varsayalım.
Bu nedenle, alt iş parçacığı sonlandırılır sonlandırılmaz, tutamacını bekleyen birleştirme işlemine gidecektir.
Yani bu durumda hem ana iş parçacığı hem de torun iş parçacığıdır.
Değil mi?
Böylece alt iş parçacığı sonlanır sonlanmaz, üst iş parçacığının yanı sıra torun iş parçacığına da bir sinyal gönderilecek
ve üst ve torun iş parçacığı birleşme noktalarının ötesinde yürütmeye devam edecektir.
Doğru.
Bu durumda, herhangi bir iş parçacığının diğer herhangi bir iş parçacığı için P iş parçacığı birleştirme API'sini çağırabileceğini görebilirsiniz.
Ve alt iş parçacığının sonlandırılmasını bekleyebilecek olan sadece üst iş parçacığı değildir.
Herhangi bir iş parçacığı sistemdeki diğer birleştirilebilir iş parçacıklarının sonlandırılmasını bekleyebilir.
Tam burada, sistem içinde, süreç içinde demektir.
Bu örnekte, büyük çocuğun aslında ana iş parçacığının sonlandırılmasını beklediğini görebilirsiniz,
bu da C Right alt iş parçacığıdır.
Dolayısıyla, iş parçacığının sonlandırılmasını beklemek herhangi bir sırada gerçekleşebilir.
Ebeveyn çocuğu bekleyebilir, çocuk ebeveyni bekleyebilir veya herhangi bir iş parçacığı başka bir iş parçacığını bekleyebilir.
Herhangi bir kısıtlama yoktur.
Aklınızda tutmanız gereken tek şey, tehdidin yalnızca birleştirilebilir bir iş parçacığının sonlandırılmasını
beklemesi gerektiğidir.
Bir iş parçacığı, ayrılmış bir iş parçacığına katılmak için ayrılmış iş parçacığını beklememelidir.
Birleşme noktasında asla başka bir konuya katılmayın.