Mercurial > hg > Applications > Grep
comparison parallel_processing/ppb_cond_counter/ppb_cond_counter.c @ 16:57650a6829a1
add some files in ppb_cond_counter
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 06 Jan 2014 15:52:00 +0900 |
parents | parallel_processing/ppb_sem_counter/ppb_sem_counter.cc@08beb7bff036 |
children | 4d8d124528f2 |
comparison
equal
deleted
inserted
replaced
15:08beb7bff036 | 16:57650a6829a1 |
---|---|
1 #include <stdio.h> | |
2 #include <pthread.h> | |
3 #include <unistd.h> | |
4 #include <semaphore.h> | |
5 | |
6 #define MAX_THREAD_NUM 2 | |
7 #define THREAD_NUM 5 | |
8 | |
9 sem_t sem; | |
10 | |
11 /** | |
12 * Mavericks では clang が default となっているが、書籍自体は gcc でコンパイルしている。 | |
13 * クラスタ環境に gcc が存在していたので、そこでコンパイルすると望ましい動作結果が得られた。 | |
14 * clang では・・・どうするんだろ | |
15 */ | |
16 void * | |
17 thread_func(void *arg) | |
18 { | |
19 long id = (long)arg; | |
20 | |
21 /* starting semaphore and ending semaphore*/ | |
22 sem_wait(&sem); | |
23 printf("Thread %ld started.\n", id); | |
24 sleep(1); | |
25 printf("Thread %ld finished.\n", id); | |
26 sem_post(&sem); | |
27 return 0; | |
28 } | |
29 | |
30 int | |
31 main() | |
32 { | |
33 pthread_t handle[THREAD_NUM]; | |
34 long i; | |
35 | |
36 /* initialize */ | |
37 sem_init(&sem, 0, MAX_THREAD_NUM); | |
38 | |
39 /* spawn thread a number of THREAD_NUM */ | |
40 for (i = 0; i < THREAD_NUM; ++i) pthread_create(&handle[i], NULL, &thread_func, (void*)i); | |
41 | |
42 /* wait for running all thread */ | |
43 for (i = 0; i < THREAD_NUM; ++i) pthread_join(handle[i], NULL); | |
44 | |
45 /* destroy mutex*/ | |
46 sem_destroy(&sem); | |
47 | |
48 return 0; | |
49 } |