Linux系统中在程序中使用线程实验: 1.编写通过命令行参数输入两个参数的程序。2.编写判断输入参数是否为质数的函数。3.编写进度条函数。4.使用pthread_attr_int()初始化线程属性数据结构threadattr。5.让程序等待所有线程结束,需要为每个线程调用pthread_join()。
时间: 2023-12-03 17:43:05 浏览: 128
以下是实现上述功能的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <stdbool.h>
// 判断是否为质数
bool is_prime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
// 进度条
void progress_bar(int percent) {
printf("[");
for (int i = 0; i < 50; i++) {
if (i < percent / 2) {
printf("#");
} else {
printf(" ");
}
}
printf("] %d%%\r", percent);
fflush(stdout);
}
// 线程函数
void *thread_func(void *arg) {
int n = *(int *)arg;
bool result = is_prime(n);
if (result) {
printf("%d is prime.\n", n);
} else {
printf("%d is not prime.\n", n);
}
return NULL;
}
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s <num1> <num2>\n", argv[0]);
return 1;
}
int num1 = atoi(argv[1]);
int num2 = atoi(argv[2]);
// 初始化线程属性
pthread_attr_t threadattr;
pthread_attr_init(&threadattr);
// 创建线程
pthread_t thread1, thread2;
pthread_create(&thread1, &threadattr, thread_func, &num1);
pthread_create(&thread2, &threadattr, thread_func, &num2);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
// 销毁线程属性
pthread_attr_destroy(&threadattr);
// 显示进度条
for (int i = 0; i <= 100; i += 10) {
progress_bar(i);
usleep(500000);
}
printf("\n");
return 0;
}
```
在命令行中执行该程序时,需要输入两个参数,如下所示:
```bash
$ ./program 12345 67890
```
程序将创建两个线程,每个线程分别判断一个数字是否为质数。等待两个线程结束后,程序将显示一个简单的进度条,表示程序正在运行。
阅读全文