-title: Pthreadによるプロセス間の同期・通信 --1. 目的 POSIX Pthread を使って並列処理を行う。 そのために Thread Pool と Synchronized Queue を作成する。 --Pthreads の Thread Pool の作成 arg[i] = (void*)malloc(sizeof(ThreadData); pthread_create(&thread[i], NULL, &thread_pool_main, &arg[i]); 等を用いて、N個のスレッドを作成し、それを管理するスレッド一つを用意する。 (main そのままでも良い) void *arg[]; pthread_t thread[]; などは、malloc を使って動的に作成すること。 管理スレッド側から、ある程度時間がたったら(sleepを使う)、管理している スレッドを殺す仕組みをいれる。 pthread_kill を使用する。 ThreadPool *pool = createThreadPool(SIZE_OF_THREAD_POOL); --Synchronized Queue の作成 管理スレッドから Thread Pool へ通信する Synchronized Queue を作成する。(Java の java.util.concurrent を参考) 計数 セマフォ を参考にSynchronized Queue を作成する。 QueueData *data = ... SyncQueue *q = createSynchronizedQueue(SIZE_OF_QUEUE); q->put(data); ... QueueData recv = q->poll(); などのAPIを持つ Queue を作成せよ。(C++ を用いても良い) --並列処理 作成した、Thread Pool 間で SynchronizedQueue を共有し、 管理スレッドから仕事を配布する。 双子素数を決まった個数求める例題を作成せよ。 答えは、メインスレッドにSynchronized Queue を用いて集める。 これを用いて、並列処理の効果を測定せよ。(time を用いる) すべてのスレッドを終了させるようにせよ。この時に、pthrea_kill を使用しては ならない。 双子素数の個数は、1分程度で計算が終るように調整せよ。 必要なら 64bit 整数を用いよ。