C言語を用いてマルチスレッド並列計算を実現するには、どうすればいいですか?

C言語で並列計算を実現するためにpthreadライブラリを使用することができます。以下は簡単なコードの例です:

#include <stdio.h>
#include <pthread.h>

// 定义线程函数
void *thread_function(void *arg) {
    int *num = (int *)arg;
    int result = 0;
    
    // 计算累加和
    for (int i = 1; i <= *num; i++) {
        result += i;
    }
    
    // 返回计算结果
    pthread_exit((void *)result);
}

int main() {
    pthread_t threads[2];
    int numbers[2] = {100, 200};
    int results[2];
    
    // 创建两个线程
    for (int i = 0; i < 2; i++) {
        pthread_create(&threads[i], NULL, thread_function, &numbers[i]);
    }
    
    // 等待线程执行完毕并获取计算结果
    for (int i = 0; i < 2; i++) {
        pthread_join(threads[i], (void **)&results[i]);
    }
    
    // 输出计算结果
    for (int i = 0; i < 2; i++) {
        printf("Thread %d result: %d\n", i, results[i]);
    }
    
    return 0;
}

このサンプルコードでは、まずthread_functionというスレッド関数が定義されており、その関数は整数のパラメータを受け取り、1からそのパラメータまでの合計を計算し、その結果をスレッドの返り値として返します。

main関数内で2つのスレッドを作成し、それぞれ異なるパラメーターを渡します。その後、pthread_join関数を使用してスレッドの実行が完了するのを待ち、計算結果を取得します。最後に、計算結果を出力します。

重要なポイントは、マルチスレッドの並列計算にはスレッド間の競合条件や同期の問題が発生する可能性があるため、それらを解決するためにはミューテックスなどのメカニズムを使用する必要があることです。上記のコード例はこれらの問題を考慮しておらず、マルチスレッドの基本的な使用方法を示すためだけに使用されます。実際のアプリケーションでは、より複雑なスレッド間通信や同期メカニズムが必要になる可能性があります。

bannerAds