在C语言中,要实现多个线程并发执行并找到最大值,你可以使用POSIX线程库(pthread)和互斥锁(mutex)。下面是一个简单的示例:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <limits.h>
#define NUM_THREADS 10
int max_value = INT_MIN;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *find_max(void *arg) {
int thread_id = *(int *)arg;
int local_max = INT_MIN;
// 模拟计算每个线程的最大值
for (int i = 0; i < 1000; i++) {
if (local_max < i) {
local_max = i;
}
}
// 使用互斥锁保护全局变量max_value
pthread_mutex_lock(&mutex);
if (local_max > max_value) {
max_value = local_max;
}
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
// 创建线程
for (int i = 0; i < NUM_THREADS; i++) {
thread_ids[i] = i;
pthread_create(&threads[i], NULL, find_max, &thread_ids[i]);
}
// 等待线程结束
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("Max value: %d\n", max_value);
return 0;
}
这个示例中,我们创建了10个线程,每个线程都会计算一个局部最大值。然后,我们使用互斥锁保护全局变量max_value
,以确保在更新最大值时不会发生竞争条件。最后,主线程等待所有子线程结束后,输出最大值。