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 }