#include <iostream>//用いるヘッダファイルが変わります。 #include <pthread.h> using namespace std;//std::を省略 int gtnum[4];//スレッド番号を渡すためのグローバル変数。スレッドの数だけ必要 void* threadfunc(void* p)//スレッドを受け取る関数はこの型でないといけません。 { //新しくできたスレッドの処理がこの関数に渡されます。 //アドレスの型変換をし、スレッド番号を受け取ります。 int* pID = (int*)p; //添え字演算でpID+0*4バイトが差すアドレス上のデータをint型として受け取る。 //int型のアドレスなので、自動的に4バイトづつデータを区切ってくれる。 int tID = pID[0]; cout << tID << "\n"; return 0; } int main() { int c; pthread_t hthread[4]; cin.exceptions(ios::failbit);//まずはcinの例外処理を有効にします。 c = 0; while(c < 4) { //第4引数、gnumが差すアドレス + c*4バイトのアドレスを渡す。 pthread_create(hthread + c , 0 , threadfunc , gtnum + c); //配列は配列名だけ書くとアドレスを示す。 //さらにint型のアドレスとなるので、4バイトづつの区切りにしてくれる。 //第一引数のhthread+cも同じ動作である。 c++; } c = 0; while(c < 4) { pthread_join(hthread[c] , 0); c++; } return 0; }