在c語言中max函數(shù)的并發(fā)執(zhí)行如何實(shí)現(xiàn)

小樊
81
2024-09-28 06:35:00
欄目: 編程語言

在C語言中,要實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行并找到最大值,你可以使用POSIX線程庫(pthread)和互斥鎖(mutex)。下面是一個(gè)簡(jiǎn)單的示例:

#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;

    // 模擬計(jì)算每個(gè)線程的最大值
    for (int i = 0; i < 1000; i++) {
        if (local_max < i) {
            local_max = i;
        }
    }

    // 使用互斥鎖保護(hù)全局變量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];

    // 創(chuàng)建線程
    for (int i = 0; i < NUM_THREADS; i++) {
        thread_ids[i] = i;
        pthread_create(&threads[i], NULL, find_max, &thread_ids[i]);
    }

    // 等待線程結(jié)束
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_join(threads[i], NULL);
    }

    printf("Max value: %d\n", max_value);

    return 0;
}

這個(gè)示例中,我們創(chuàng)建了10個(gè)線程,每個(gè)線程都會(huì)計(jì)算一個(gè)局部最大值。然后,我們使用互斥鎖保護(hù)全局變量max_value,以確保在更新最大值時(shí)不會(huì)發(fā)生競(jìng)爭(zhēng)條件。最后,主線程等待所有子線程結(jié)束后,輸出最大值。

0