annotate meta_connector/example/synchronizedQueueIdeal.c @ 26:b9f88346cecd support auto stub generation

generate stub
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Mon, 02 Nov 2015 04:02:13 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdlib.h>
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include <stdio.h>
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include "synchronizedQueueContext.h"
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include "allocate.h"
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #include "origin_cs.h"
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #ifdef CLANG
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #define _CbC_retrun __return
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 #define _CbC_environment __environment
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 #endif
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 #define NUM 100
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 extern __code initSynchronizedQueueContext(struct Context* context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 extern void allocator(struct Context* context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 __code meta(struct Context* context, enum Code next) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 goto (context->code[next])(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 __code code1(struct Allocate* allocate) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 allocate->size = sizeof(long);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 allocator(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 goto code2();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 __code code2(long* count) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 *count = 0;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 goto code3();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 __code code3(long* count, struct Allocate* allocate) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 long loop = *count;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 if(loop == NUM) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 goto thread_exit();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 allocate->size = sizeof(struct Element);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 allocator(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 goto code4();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 __code code4(long* count, struct Allocate* allocate, struct Element* element) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 allocate->after_put = Code3;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 element->value = (*count)++;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 goto sender();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 __code code4_stub(struct Context* context) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 goto code4(context, &context->data[Count]->count, &context->data[Allocate]->allocate, &context->data[context->dataNum]->element);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 __code meta_sender(struct Context* context, struct Queue* queue, enum Code next) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 // lock
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 pthread_mutex_lock(&queue->mutex);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 goto (context->code[next])(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 __code sender(struct Context* context, struct Queue* queue) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 goto meta_sender(context, queue, Put);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 __code meta_put(struct Context* context, struct Queue* queue, enum Code next) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 // signal
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 pthread_cond_signal(&queue->cond);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 // unlock
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 pthread_mutex_unlock(&queue->mutex);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 goto (context->code[next])(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 __code put_stub(struct Context* context) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 goto put(context, &context->data[Allocate]->allocate, &context->data[Queue]->queue, &context->data[context->dataNum]->element);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 __code put(struct Context* context, struct Allocate* allocate, struct Queue* queue, struct Element* element) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 if(queue->first) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 queue->last->next = element;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 } else {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 queue->first = element;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 queue->last = element;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 element->next = 0;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 queue->count++;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 printf("Put %d\n\n", element->value);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 goto meta_put(context, queue, allocate->after_put);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 __code code5(struct Allocate* allocate) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 allocate->size = sizeof(long);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 allocator(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 goto code6();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 __code code5_stub(struct Context* context) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 goto code5(context, &context->data[Allocate]->allocate);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 __code code6(long* count) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 *count = 0;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 goto code7();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 __code code7(long* count, struct Allocate* allocate) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 long loop = *count;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 if(loop == NUM) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 goto meta(context, Thread_exit);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 (*count)++;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 allocate->after_get = Code7;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 goto receiver();
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 __code meta_receiver(struct Context* context, struct Queue* queue, enum Code next) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 // lock
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 pthread_mutex_lock(&queue->mutex);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 goto (context->code[next])(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 __code receiver(struct Queue* queue) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 goto meta_receiver(context, queue, Get);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 __code meta_get(struct Context* context, enum Code next) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 pthread_mutex_unlock(&context->data[Queue]->queue.mutex);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 goto (context->code[next])(context);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 __code get(struct Allocate* allocate, struct Queue* queue, struct Element* element) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 // thread wait if queue is empty
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 while (queue->count == 0) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 pthread_cond_wait(&queue->cond, &queue->mutex);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 printf(" Get %d\n\n", queue->first->value);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 queue->first = (queue->first->next) ? queue->first->next : 0;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 queue->count--;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 goto meta_get(context, allocate->after_get);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 __code get_stub(struct Context* context) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 goto get(context, &context->data[Allocate]->allocate, &context->data[Queue]->queue, &context->data[context->dataNum]->element);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 __code thread_exit() {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 free(context->code);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 free(context->data);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 free(context->heapStart);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 pthread_exit(0);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 void* thread_func(void* context) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 goto start_code((struct Context*)context, Code1);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 return 0;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 void* thread_func2(void* context) {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 goto start_code((struct Context*)context, Code5);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 return 0;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 }
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 int main() {
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 struct Context* context1 = (struct Context*)malloc(sizeof(struct Context));
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 initSynchronizedQueueContext(context1);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 struct Context* context2 = (struct Context*)malloc(sizeof(struct Context));
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 initSynchronizedQueueContext(context2);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 struct Context* context3 = (struct Context*)malloc(sizeof(struct Context));
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 initSynchronizedQueueContext(context3);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 struct Context* context4 = (struct Context*)malloc(sizeof(struct Context));
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 initSynchronizedQueueContext(context4);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 context2->data[Queue] = context1->data[Queue];
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 context3->data[Queue] = context1->data[Queue];
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 context4->data[Queue] = context1->data[Queue];
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 pthread_t thread1, thread2, thread3, thread4;
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 pthread_create(&thread1, NULL, thread_func, (void *)context1);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 pthread_create(&thread2, NULL, thread_func, (void *)context2);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 pthread_create(&thread3, NULL, thread_func2, (void *)context3);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 pthread_create(&thread4, NULL, thread_func2, (void *)context4);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 pthread_join(thread1, NULL);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 pthread_join(thread2, NULL);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 pthread_join(thread3, NULL);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 pthread_join(thread4, NULL);
b9f88346cecd generate stub
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 }