在c语言中max函数的并发执行如何实现

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!