Tek bir iş parçacığının çağırdığı bir işleve sahibiz (bunu ana iş parçacığı olarak adlandırıyoruz). İşlevin gövdesi içinde, CPU yoğun iş yapmak için birden çok çalışan iş parçacığı oluştururuz, tüm iş parçacıklarının bitmesini bekleriz, ardından sonucu ana iş parçacığında döndürürüz.
Sonuç, arayanın işlevi saf bir şekilde kullanabilmesi ve dahili olarak birden çok çekirdeği kullanmasıdır.
Şimdiye kadar hepsi iyi ..
Sahip olduğumuz sorun istisnalarla uğraşmaktır. Çalışan iş parçacıklarında istisnaların uygulamayı çökertmesini istemiyoruz. Arayanın onları ana ileti dizisinde yakalayabilmesini istiyoruz. İşçi iş parçacıklarındaki istisnaları yakalamalı ve oradan ayrılmaya devam etmelerini sağlamak için bunları ana iş parçacığına yaymalıyız.
Bunu nasıl yapabiliriz?
Aklıma gelen en iyi şey:
- Çalışan iş parçacıklarımızda çok çeşitli istisnaları yakalayın (std :: exception ve kendimize ait olanlardan birkaçı).
- İstisnanın türünü ve mesajını kaydedin.
- Ana iş parçacığı üzerinde, çalışan iş parçacığına kaydedilen türden istisnaları yeniden toplayan karşılık gelen bir switch deyimine sahip olun.
Bu, yalnızca sınırlı bir istisna türü kümesini desteklemenin bariz dezavantajına sahiptir ve yeni istisna türleri eklendiğinde değişiklik yapılması gerekir.