Mercurial > hg > Applications > Grep
view parallel_processing/ppb_sem_counter/ppb_sem_counter.cc @ 15:08beb7bff036
add comment
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 06 Jan 2014 15:41:38 +0900 |
parents | cc2e4f2c9ce8 |
children |
line wrap: on
line source
#include <stdio.h> #include <pthread.h> #include <unistd.h> #include <semaphore.h> #define MAX_THREAD_NUM 2 #define THREAD_NUM 5 sem_t sem; /** * Mavericks では clang が default となっているが、書籍自体は gcc でコンパイルしている。 * クラスタ環境に gcc が存在していたので、そこでコンパイルすると望ましい動作結果が得られた。 * clang では・・・どうするんだろ */ void * thread_func(void *arg) { long id = (long)arg; /* starting semaphore and ending semaphore*/ sem_wait(&sem); printf("Thread %ld started.\n", id); sleep(1); printf("Thread %ld finished.\n", id); sem_post(&sem); return 0; } int main() { pthread_t handle[THREAD_NUM]; long i; /* initialize */ sem_init(&sem, 0, MAX_THREAD_NUM); /* spawn thread a number of THREAD_NUM */ for (i = 0; i < THREAD_NUM; ++i) pthread_create(&handle[i], NULL, &thread_func, (void*)i); /* wait for running all thread */ for (i = 0; i < THREAD_NUM; ++i) pthread_join(handle[i], NULL); /* destroy mutex*/ sem_destroy(&sem); return 0; }