私のプログラムはマルチスレッドです。各スレッドは、データの特定のチャンクを担当します。私がやっていることは、下限と上限を計算し、それらを構造体を介してスレッド関数に渡すことです。lower_bound と upper_bound はどちらも符号なし整数です。
メインスレッドには、次の下限と上限があります。
lower_bound: 3;
upper_bound: (NUM/num_threads) - 1;
他のワーカー スレッドには、次の下限と上限があります。
lower_bound = (NUM * (i + 1))/(num_threads);
upper_bound = (NUM * (i + 2))/(num_threads) - 1;
NUM は私のプログラムで定義された定数です。このプログラムは、ある程度までは正常に動作することに気付きました。10^8 は正常に機能しますが、10^9 は機能しません。プログラムをデバッグするために、ワーカー スレッドに出力を出力させます。
10^8 までの 10 スレッドの出力。
lower_bound: 10000000 upper_bound: 19999999
lower_bound: 20000000 upper_bound: 29999999
lower_bound: 30000000 upper_bound: 39999999
lower_bound: 60000000 upper_bound: 69999999
lower_bound: 70000000 upper_bound: 79999999
lower_bound: 50000000 upper_bound: 59999999
lower_bound: 80000000 upper_bound: 89999999
lower_bound: 40000000 upper_bound: 49999999
lower_bound: 90000000 upper_bound: 99999999
10^9 までの 10 スレッドの出力。
lower_bound: 100000000 upper_bound: 199999999
lower_bound: 200000000 upper_bound: 299999999
lower_bound: 300000000 upper_bound: 399999999
lower_bound: 70503270 upper_bound: 170503269
lower_bound: 170503270 upper_bound: 270503269
lower_bound: 270503270 upper_bound: 370503269
lower_bound: 370503270 upper_bound: 41006539
lower_bound: 41006540 upper_bound: 141006539
lower_bound: 400000000 upper_bound: 70503269
世界で何が起こっているのですか?