web-dev-qa-db-ja.com

Cのスレッドに複数のパラメーターを渡す方法

Cのスレッドに2つのパラメーターを渡そうとしています。(サイズ2の)配列を作成し、その配列をスレッドに渡そうとしています。これは、複数のパラメーターをスレッドに渡す正しいアプローチですか?

// parameters of input. These are two random numbers 
int track_no = Rand()%15; // getting the track number for the thread
int number = Rand()%20 + 1; // this represents the work that needs to be done
int *parameters[2];
parameters[0]=track_no;
parameters[1]=number;

// the thread is created here 
pthread_t server_thread;
int server_thread_status;
//somehow pass two parameters into the thread
server_thread_status = pthread_create(&server_thread, NULL, disk_access, parameters);
12
Ashish Agarwal

Voidポインターを渡すので、次のように、構造体を含むすべてのものを指すことができます例:

typedef struct s_xyzzy {
    int num;
    char name[20];
    float secret;
} xyzzy;

xyzzy plugh;
plugh.num = 42;
strcpy (plugh.name, "paxdiablo");
plugh.secret = 3.141592653589;

status = pthread_create (&server_thread, NULL, disk_access, &plugh);
// pthread_join down here somewhere to ensure plugh
//   stay in scope while server_thread is using it.
18
paxdiablo

それが1つの方法です。もう1つの通常の方法は、ポインタをstructに渡すことです。このようにして、さまざまな「パラメーター」タイプを設定できます。パラメーターにはインデックスが付けられるのではなく名前が付けられるため、コードが少し読みやすくなり、フォローしやすくなります。

1
Mat