Mercurial > hg > Applications > Grep
view parallel_processing/chapter3/ppb_data_shared/ppb_data_shared.cc @ 122:188d866227a4 pairPro
fix
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 30 Nov 2015 23:43:53 +0900 |
parents | 508b47c8f4d8 |
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; }