阅读量:0
在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
,以确保在更新最大值时不会发生竞争条件。最后,主线程等待所有子线程结束后,输出最大值。