多线程计算素数:编写一个程序primer_thr2.c,程序运行开始时,创建200个子线程,主线程等待这200个子线程结束;200个子线程分别判断30000000到30000200之间的200个数是否为素数,如果是素数则输出这个数。
时间: 2024-03-08 08:48:23 浏览: 37
下面是一个基于您的要求编写的 primer_thr2.c 程序:
```c
#include <stdio.h>
#include <pthread.h>
#include <stdbool.h>
#define NUM_THREADS 200
#define START_NUM 30000000
#define END_NUM 30000200
bool is_prime(long num) {
if (num <= 1) {
return false;
}
for (long i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
void* check_prime(void* arg) {
long num = (long)arg;
if (is_prime(num)) {
printf("%ld is prime\n", num);
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
pthread_create(&threads[i], NULL, check_prime, (void*)(START_NUM + i));
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
```
该程序使用了一个单独的 is_prime 函数来判断一个数字是否为素数。在 check_prime 函数中,先将传入的 void 类型指针转换为 long 类型变量 num,然后调用 is_prime 函数判断该数字是否为素数。如果是,就打印出该数字是素数。最后,调用 pthread_exit 函数退出线程。
在主函数中,先创建了 200 个子线程,每个子线程分别负责判断 30000000 到 30000200 之间的一个数字是否为素数。然后等待子线程结束。程序结束后,返回 0。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)