亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

如何利用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
怀仁县| 龙州县| 乌拉特前旗| 哈密市| 肃宁县| 金平| 龙南县| 绩溪县| 淮阳县| 翁牛特旗| 资中县| 龙里县| 哈尔滨市| 呼图壁县| 宝清县| 崇州市| 汾阳市| 济宁市| 苍南县| 新化县| 贺州市| 且末县| 唐海县| 平顺县| 上高县| 庆云县| 耒阳市| 清流县| 恩施市| 西丰县| 柳河县| 南皮县| 桃园县| 永城市| 方正县| 嘉峪关市| 泸西县| 厦门市| 蒙自县| 丽水市| 博野县|