温馨提示×

linux pthread怎样传递参数

小樊
81
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