スレッドを理解しようとしています。複数のスレッドに素数を計算させようとしています。1 つのスレッドで最初の数値を計算してから、次のスレッドで次の数値を計算し、次の数値を計算し、最上位のスレッドを見つけてそれを印刷します。
したがって、1 から 50 までから始めます。新しい番号を新しいスレッドに渡します。それが私たちが望んでいることだと思います。
ここに私がこれまで持っているものがあります。
void* compute_prime (void* arg)
{
//pthread_mutex_lock(&lock);
int candidate = 2;
int n = *((int*) arg);
while (1) {
int factor;
int is_prime = 1;
/* Test primality by successive division. */
for (factor = 2; factor < candidate; ++factor)
if (candidate % factor == 0) {
is_prime = 0;
break;
}
/* Is this the prime number we're looking for? */
if (is_prime) {
if (--n == 0)
/* Return the desired prime number as the thread return value. */
return (void*) candidate;
}
++candidate;
}
return NULL;
}
int main ()
{
int which_prime = 50;
int isPrime1, isPrime2, isPrime3, isPrime4;
fprintf (stderr, "main thread pid is %d\n", (int) getpid ());
for(master_list; master_list < which_prime; master_list++)
{
//do{
// pthread_mutex_lock(&lock);
pthread_create (&thread1, NULL, &compute_prime, &master_list);
//master_list++;
//pthread_mutex_unlock(&lock);
//}while(master_list < which_prime);
}
return 0;
}
私の出力。
main thread pid is 508
Thread1 Found the prime number: 3.
Thread2 Found the prime number: 3.
Thread3 Found the prime number: 3.
Thread4 Found the prime number: 3.
Thread1 Found the prime number: 7.
Thread2 Found the prime number: 7.
Thread3 Found the prime number: 7.
Thread4 Found the prime number: 7.
Thread1 Found the prime number: 13.
Thread2 Found the prime number: 13.
Thread3 Found the prime number: 13.
Thread4 Found the prime number: 13.
等....
これは私が欲しいものです。しかし、すべてのスレッドが同じ素数を見つける必要はありません。彼らは異なる素数を見つけているはずです。スレッドの前に変数をインクリメントしても、まだ機能しません。動作させようとしたコードをコメントアウトしました。私は何をする必要がありますか?私が明確だったことを願っています。