91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何利用pthread_t實現并發控制

小樊
84
2024-09-05 15:32:33
欄目: 編程語言

pthread_t 是 POSIX 線程庫中表示線程的數據類型

  1. 包含頭文件:在你的源代碼文件中,需要包含 <pthread.h> 頭文件。
#include <pthread.h>
  1. 定義線程函數:創建一個線程函數,該函數將在新線程中運行。線程函數應該接受一個 void * 類型的參數,并返回一個 void * 類型的值。
void *thread_function(void *arg) {
    // 在這里編寫你的線程執行代碼
    return NULL;
}
  1. 創建線程變量:定義一個 pthread_t 類型的變量,用于存儲線程的 ID。
pthread_t thread_id;
  1. 創建線程:使用 pthread_create() 函數創建一個新線程。該函數需要三個參數:指向線程 ID 的指針、線程屬性(通常為 NULL)和線程函數的地址。
int result = pthread_create(&thread_id, NULL, thread_function, NULL);
if (result != 0) {
    printf("Error creating thread: %d\n", result);
    exit(1);
}
  1. 等待線程結束(可選):如果你需要等待線程完成其任務,可以使用 pthread_join() 函數。該函數需要兩個參數:線程 ID 和一個指向 void * 類型的指針,用于存儲線程函數的返回值。
void *return_value;
int result = pthread_join(thread_id, &return_value);
if (result != 0) {
    printf("Error joining thread: %d\n", result);
    exit(1);
}
  1. 使用互斥鎖或其他同步原語來實現并發控制。例如,使用 pthread_mutex_t 類型的互斥鎖來保護共享資源。
#include <pthread.h>
#include<stdio.h>
#include <stdlib.h>

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int shared_counter = 0;

void *thread_function(void *arg) {
    for (int i = 0; i < 100000; i++) {
        pthread_mutex_lock(&mutex);
        shared_counter++;
        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

int main() {
    const int NUM_THREADS = 10;
    pthread_t threads[NUM_THREADS];

    for (int i = 0; i < NUM_THREADS; i++) {
        int result = pthread_create(&threads[i], NULL, thread_function, NULL);
        if (result != 0) {
            printf("Error creating thread: %d\n", result);
            exit(1);
        }
    }

    for (int i = 0; i < NUM_THREADS; i++) {
        void *return_value;
        int result = pthread_join(threads[i], &return_value);
        if (result != 0) {
            printf("Error joining thread: %d\n", result);
            exit(1);
        }
    }

    printf("Shared counter: %d\n", shared_counter);
    return 0;
}

這個示例展示了如何使用 pthread_t、互斥鎖和其他 POSIX 線程函數來實現并發控制。注意,這個示例僅用于演示目的,實際應用中可能需要更復雜的錯誤處理和資源管理。

0
内黄县| 南皮县| 海晏县| 十堰市| 青海省| 剑河县| 沂水县| 聊城市| 安西县| 富蕴县| 新宾| 瑞昌市| 穆棱市| 当雄县| 漠河县| 东明县| 平利县| 灵台县| 灌南县| 鲁山县| 浏阳市| 凤台县| 东台市| 营口市| 丰县| 新沂市| 阿拉善盟| 贵溪市| 万州区| 自贡市| 商丘市| 武乡县| 抚顺县| 迭部县| 松潘县| 洪湖市| 汕尾市| 金昌市| 扶绥县| 贵德县| 克山县|