Mercurial > hg > Applications > Grep
view parallel_processing/ppb_data_shared/ppb_data_shared.cc @ 12:47f90873a72c
add comment
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 03 Jan 2014 21:11:11 +0900 |
parents | f522b6bf6789 |
children |
line wrap: on
line source
#include <stdio.h> #include <pthread.h> #define THREAD_NUM 2 #define DATA_NUM 10 typedef struct _thread_arg { int thread_no; int *data; pthread_mutex_t *mutex; } thread_arg_t; void * thread_func(void *arg) { thread_arg_t *targ = (thread_arg_t *)arg; int result; /* starting mutex and ending mutex*/ for (int i = 0; i < DATA_NUM; i++) { pthread_mutex_lock(targ->mutex); result = targ->data[i] + 1; sched_yield(); targ->data[i] = result; pthread_mutex_unlock(targ->mutex); } return 0; } int main() { pthread_t handle[THREAD_NUM]; thread_arg_t targ[THREAD_NUM]; int data[DATA_NUM]; int i; pthread_mutex_t mutex; /* initialize */ for (i = 0; i < DATA_NUM; i++) data[i] = 0; /* initialized mutex*/ pthread_mutex_init(&mutex, NULL); /* spawn thread a number of THREAD_NUM */ for (i = 0; i < THREAD_NUM; i++) { targ[i].thread_no = i; targ[i].data = data; targ[i].mutex = &mutex; /* spawn thread*/ pthread_create(&handle[i], NULL, &thread_func, (void*)&targ[i]); } /* wait for running all thread */ for (i = 0; i < THREAD_NUM; i++) pthread_join(handle[i], NULL); /* destroy mutex*/ pthread_mutex_destroy(&mutex); for (i = 0; i < DATA_NUM; i++) printf("data%d : %d\n", i, data[i]); return 0; }