c語(yǔ)言怎么實(shí)現(xiàn)多線程

小億
109
2023-11-15 23:33:36

在C語(yǔ)言中實(shí)現(xiàn)多線程可以使用POSIX線程庫(kù)(pthread)或Windows線程庫(kù)等。下面是一個(gè)使用POSIX線程庫(kù)實(shí)現(xiàn)多線程的示例:

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

// 線程函數(shù),傳入一個(gè)整數(shù)參數(shù)
void* thread_func(void* arg) {
    int n = *(int*)arg;
    printf("Hello from thread %d\n", n);
    pthread_exit(NULL);
}

int main() {
    int num_threads = 5;
    pthread_t threads[num_threads];
    int thread_args[num_threads];

    // 創(chuàng)建多個(gè)線程
    for (int i = 0; i < num_threads; i++) {
        thread_args[i] = i;
        pthread_create(&threads[i], NULL, thread_func, &thread_args[i]);
    }

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

    printf("All threads are done.\n");
    return 0;
}

在這個(gè)示例中,thread_func是一個(gè)線程函數(shù),用來(lái)打印線程的標(biāo)識(shí)號(hào)。main函數(shù)中首先創(chuàng)建了多個(gè)線程,每個(gè)線程都傳入一個(gè)整數(shù)參數(shù),然后等待每個(gè)線程執(zhí)行完畢。最后輸出所有線程結(jié)束的提示信息。

要編譯上述代碼,可以使用以下命令:

gcc -o multithreading multithreading.c -lpthread

這將生成一個(gè)可執(zhí)行文件multithreading,運(yùn)行它將會(huì)看到多個(gè)線程按順序打印出它們的標(biāo)識(shí)號(hào),最后輸出所有線程結(jié)束的提示信息。

請(qǐng)注意,在使用多線程時(shí)要注意線程間的同步和互斥問(wèn)題,以避免競(jìng)爭(zhēng)條件和數(shù)據(jù)訪問(wèn)沖突等問(wèn)題。

0