Mercurial > hg > Members > masakoha > testcode
changeset 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 | 08beb7bff036 |
children | 4d8d124528f2 |
files | parallel_processing/ppb_cond_counter/Makefile parallel_processing/ppb_cond_counter/ppb_cond_counter.c |
diffstat | 2 files changed, 60 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parallel_processing/ppb_cond_counter/Makefile Mon Jan 06 15:52:00 2014 +0900 @@ -0,0 +1,11 @@ +TARGET = ppb_cond_counter +CC = clang +CPPFLAGS = -g -O0 + +$(TARGET): $(TARGET).o + $(CC) -g -O0 -o $@ $< +$(TARGET).o: $(TARGET).c + +clean: + rm -f $(TARGET) + rm -f *.o
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parallel_processing/ppb_cond_counter/ppb_cond_counter.c Mon Jan 06 15:52:00 2014 +0900 @@ -0,0 +1,49 @@ +#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; +}