用C语言编写程序:由主线程创建两个线程,线程1进行计数,线程2完成预先设计的1-1000的累加,将计算结果作为返回值返回给主线程。主线程等待线程2结束,打印返回信息;并在线程2结束后取消线程1,打印线程1的计数。
时间: 2024-12-19 09:02:55 浏览: 22
在C语言中,我们可以使用`pthread.h`库来实现一个多线程程序。以下是一个简单的示例,展示了如何按照您的需求创建、同步和管理线程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
// 定义全局变量
int count = 0;
pthread_t thread1_id, thread2_id; // 线程ID
long sum = 0;
void *thread_func1(void *arg) {
int i;
for (i = 1; i <= 100; ++i) {
++count;
pthread_yield(); // 让出CPU,让其他线程运行
}
return NULL;
}
void *thread_func2(void *arg) {
int i;
for (i = 1; i <= 1000; ++i) {
sum += i;
}
printf("Thread 2 result: %ld\n", sum);
pthread_exit(&sum); // 返回计算结果
}
int main() {
pthread_attr_t attr;
pthread_attr_init(&attr);
// 创建线程1
if (pthread_create(&thread1_id, &attr, thread_func1, NULL)) {
perror("Creating thread 1");
exit(EXIT_FAILURE);
}
// 创建线程2,并传递结果存储位置
void *result;
if (pthread_create(&thread2_id, &attr, thread_func2, &result)) {
perror("Creating thread 2");
exit(EXIT_FAILURE);
}
// 等待线程2结束,获取其结果
pthread_join(thread2_id, &sum);
printf("Thread 2 returned: %ld\n", sum);
// 取消线程1
pthread_cancel(thread1_id);
pthread_join(thread1_id, NULL);
printf("Thread 1 count: %d\n", count);
pthread_attr_destroy(&attr);
return 0;
}
```
在这个程序中,`thread_func1`负责计数,`thread_func2`负责累加。主线程首先创建两个线程,然后等待`thread_func2`完成并获取结果,再取消`thread_func1`。最后,主线程会打印出每个线程的结果。
注意:在实际应用中,为了处理可能出现的错误,比如线程取消失败等,你需要增加适当的错误检查和处理代码。
阅读全文