この値をこのスレッドの特定の値にすることはできますか?
さて、まず最初に、あなたはおそらくこれが欲しいでしょう:
int id = *((int*) param);
つまり、型を持つポインターを指定した後、パラメーターポインターを逆参照する必要があります。voidには型がないため、voidポインタを逆参照することはできません。
さて、ここで何が起こりますか?まず、スレッドを少し理解する必要があります。
まず、Linuxのカーネルではスレッドとプロセスの区別はありません。絶対にありません。それらはすべて実行またはタスクのコンテキストです。ただし、大きな違いの1つは、スレッドスタックを除いて、スレッド化されたタスクがデータを共有することです。その答えを読むと、スレッドが他のほとんどすべてをその作成者と共有していることがわかります。
ただし、スタックは共有しないでください。スタックは多くのことを追跡します。たとえば、プログラムが実行に関しては、一部のシステムでは値と関数パラメーターを返します。関数内で宣言された自動保存期間変数(他の修飾子がない変数)もスタックに保存されます。
つまり、スレッド関数内で宣言された変数は、そのスレッドに固有です。だから、あなたの機能を考えると:
void threadfunc(void* param)
{
int id = /* ??? */
}
各スレッドには、ローカルに保存された独自のコピーがint id
あり、スレッドの期間中持続します。これを値またはポインタで後続の関数に渡すことができます。
そのため、次のように呼び出すことは完全に有効です。
int tParam[] = {1,2,3};
rc = pthread_create(&threads[1], NULL, Thread_Pool, (void *)&(tParam[1]));
rc = pthread_create(&threads[2], NULL, Thread_Pool, (void *)&(tParam[2]));
rc = pthread_create(&threads[3], NULL, Thread_Pool, (void *)&(tParam[3]));
等々。