溫馨提示×

linux pthread怎樣傳遞參數

小樊
118
2024-12-29 03:15:19
欄目: 智能運維

在Linux中,使用POSIX線程(pthread)時,可以通過以下兩種方法傳遞參數:

  1. 使用全局變量

創建一個全局變量,將需要傳遞的參數設置為全局變量的值。然后在創建pthread時,將全局變量的地址作為參數傳遞給pthread函數。在pthread函數內部,可以通過指針訪問全局變量的值。

示例代碼:

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

// 全局變量
int arg1 = 10;
int arg2 = 20;

// pthread函數原型
void *print_args(void *args);

int main() {
    pthread_t thread1, thread2;

    // 創建第一個線程
    pthread_create(&thread1, NULL, print_args, (void *)&arg1);
    // 創建第二個線程
    pthread_create(&thread2, NULL, print_args, (void *)&arg2);

    // 等待線程結束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    return 0;
}

// pthread函數
void *print_args(void *args) {
    int arg = *((int *)args);
    printf("Thread ID: %ld, Argument: %d\n", (long)pthread_self(), arg);
    return NULL;
}
  1. 使用結構體

定義一個結構體,將需要傳遞的參數封裝到結構體中。然后在創建pthread時,將結構體的地址作為參數傳遞給pthread函數。在pthread函數內部,可以通過指針訪問結構體的成員變量。

示例代碼:

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

// 定義結構體
typedef struct {
    int arg1;
    int arg2;
} Args;

// pthread函數原型
void *print_args(void *args);

int main() {
    pthread_t thread1, thread2;

    // 創建結構體實例
    Args arg1 = {10, 0};
    Args arg2 = {0, 20};

    // 創建第一個線程
    pthread_create(&thread1, NULL, print_args, (void *)&arg1);
    // 創建第二個線程
    pthread_create(&thread2, NULL, print_args, (void *)&arg2);

    // 等待線程結束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    return 0;
}

// pthread函數
void *print_args(void *args) {
    Args *arg = (Args *)args;
    printf("Thread ID: %ld, Argument1: %d, Argument2: %d\n", (long)pthread_self(), arg->arg1, arg->arg2);
    return NULL;
}

這兩種方法都可以實現將參數傳遞給pthread函數。使用全局變量時需要注意線程間的同步問題,避免數據競爭。而使用結構體則更加安全和靈活。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女