 PI basamaklarını hesaplamak için çok iş parçacıklı bir C++ programı yazın.
PI basamaklarını hesaplamak için çok iş parçacıklı bir C++ programı örneği: ``` #include <iostream> #include <thread> #include <mutex> #include <vector> using namespace std; muteks mut; void pi_digits(int başlangıç, int bitiş, vektör<int>& basamaklar) { int taşıma = 0; for (int i = bitiş; i >= başlangıç; i--) { int toplam = 0; for (int j = i; j > 0; j--) { toplam = toplam * j + basamak[j] * 10000; haneler[j] = toplam % (j * 2 - 1); toplam /= j * 2 - 1; } taşıma = (taşıma + basamak[1] / 10000); basamak[1] %= 10000; } mut.lock(); cout << taşımak; for (int i = 2; i < digits.size(); i++) { printf("%04d", digits[i] / 10000); basamak[i] = basamak[i] % 10000; } mut.unlock(); } int main() { const int sayı_threads = 4; vektör<int> basamak(100); vektör<thread> threads(num_threads); for (int i = 0; i < num_threads; i++) { int start = i * (digits.size() - 1) / num_threads + 1; int bitiş = (i + 1) * (digits.size() - 1) / num_threads; thread[i] = thread(pi_digits, start, end, ref(digits)); } for (oto& t : ileti dizileri) { t.join(); } 0 döndürür; } `` Bu program, PI rakamlarını hesaplamak için Bailey-Borwein-Plouffe (BBP) formülünü kullanır. Formül birkaç bölüme ayrılmıştır ve her bölüm ayrı bir iş parçacığı tarafından hesaplanır. Diziler, sonuçlarını, PI'nin tek tek rakamlarını saklayan, "rakamlar" adı verilen paylaşılan bir vektöre yazar. Program, konsola aynı anda yalnızca bir iş parçacığının yazmasını sağlamak için bir muteks kullanır. "ref(digits)" bağımsız değişkeni, vektörü iş parçacıklarına göre iletmek için kullanılır. Son olarak, program bir iş parçacığı vektörü oluşturur ve işlerini bitirdiklerinde bunları birleştirir.