pthread_createのマニュアルページによると、関数の引数は次のとおりです。
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
voidに関しては*arg
、私が作成する関数には2つの引数が必要なので、複数の引数を渡すことができるかどうか疑問に思います。
yourvoid*
を使用すると、選択した構造体を渡すことができます。
struct my_args {
int arg1;
double arg2;
};
これにより、実質的に任意の引数を渡すことができます。スレッド開始ルーチンは、それらをアンパックして実際のスレッド開始ルーチンを呼び出す以外に何もできません (それ自体がその構造体から来る可能性があります)。
構造体を作成し、関数を書き直して1つの引数のみを取り、構造体内で両方の引数を渡します。
それ以外の
thread_start(int a, int b) {
使用する
typedef struct ts_args {
int a;
int b;
} ts_args;
thread_start(ts_args *args) {
構造体とを使用しmalloc
ます。例えば
struct
{
int x;
int y;
char str[10];
} args;
args_for_thread = malloc(sizeof(args));
args_for_thread->x = 5;
... etc
次にargs_for_thread
、のargs
引数として使用しますpthread_create
(void*からargs*へのキャストを使用します)。メモリを解放するのはそのスレッド次第です。