Mercurial > hg > Applications > Grep
comparison parallel_processing/ppb_data_shared/ppb_data_shared.cc @ 10:51177cc6ab38
add ppb_data_shared
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 03 Jan 2014 02:03:11 +0900 |
parents | parallel_processing/ppb_data_split/ppb_data_split.cc@fe8c1c25296a |
children | f522b6bf6789 |
comparison
equal
deleted
inserted
replaced
9:fe8c1c25296a | 10:51177cc6ab38 |
---|---|
1 #include <stdio.h> | |
2 #include <pthread.h> | |
3 | |
4 #define THREAD_NUM 2 | |
5 #define DATA_NUM 10 | |
6 #define SPLIT_DATA_NUM (DATA_NUM / THREAD_NUM) | |
7 | |
8 typedef struct _thread_arg { | |
9 int thread_no; | |
10 int *data; | |
11 } thread_arg_t; | |
12 | |
13 void * | |
14 thread_func(void *arg) | |
15 { | |
16 thread_arg_t *targ = (thread_arg_t *)arg; | |
17 | |
18 for (int i = 0; i < SPLIT_DATA_NUM; i++) { | |
19 printf("thread%d : %d + 1 = %d\n", | |
20 targ->thread_no, targ->data[i], targ->data[i] + 1); | |
21 } | |
22 return 0; | |
23 } | |
24 | |
25 int | |
26 main() | |
27 { | |
28 pthread_t handle[THREAD_NUM]; | |
29 thread_arg_t targ[THREAD_NUM]; | |
30 int data[DATA_NUM]; | |
31 int i; | |
32 | |
33 /* initialize */ | |
34 for (i = 0; i < DATA_NUM; i++) data[i] = i; | |
35 | |
36 /* spawn thread a number of THREAD_NUM */ | |
37 for (i = 0; i < THREAD_NUM; i++) { | |
38 targ[i].thread_no = i; | |
39 | |
40 /* divide a data into THREAD_NUM*/ | |
41 targ[i].data = &data[SPLIT_DATA_NUM * i]; | |
42 /* spawn thread*/ | |
43 pthread_create(&handle[i], NULL, &thread_func, (void*)&targ[i]); | |
44 } | |
45 | |
46 /* wait for running all thread */ | |
47 for (i = 0; i < THREAD_NUM; i++) pthread_join(handle[i], NULL); | |
48 return 0; | |
49 } |