编制一个多线程程序,除main线程外,派生两个子线程完成上述计算,main线程负责数据输入和输出计算结果,两个子线程发执行共同计算。
时间: 2024-02-17 14:02:11 浏览: 92
多线程实现程序
以下是一个简单的C++多线程程序,其中包含一个主线程和两个子线程,用于计算一个整数数组中所有元素的总和。
```c++
#include <iostream>
#include <pthread.h>
#define NUM_THREADS 2
#define ARRAY_SIZE 10
int array[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = 0;
pthread_mutex_t mutex;
void* calculateSum(void* threadid) {
long tid = (long)threadid;
int start = tid * (ARRAY_SIZE / NUM_THREADS);
int end = start + (ARRAY_SIZE / NUM_THREADS);
int localSum = 0;
for (int i = start; i < end; i++) {
localSum += array[i];
}
pthread_mutex_lock(&mutex);
sum += localSum;
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
pthread_mutex_init(&mutex, NULL);
for (long i = 0; i < NUM_THREADS; i++) {
int rc = pthread_create(&threads[i], NULL, calculateSum, (void*)i);
if (rc) {
std::cout << "Error: unable to create thread, " << rc << std::endl;
exit(-1);
}
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex);
std::cout << "The sum of the array is: " << sum << std::endl;
pthread_exit(NULL);
}
```
在上述程序中,我们初始化了一个包含10个整数的数组,然后创建了两个子线程来计算数组中的元素之和。主线程等待两个子线程完成计算后,输出计算结果。
在子线程中,我们使用互斥锁来保护共享变量sum的访问,以避免线程之间的竞争和不一致性。子线程计算数组中一部分元素的和,然后将其添加到sum中。当子线程完成计算时,它将退出并释放其资源。
阅读全文