質問編集履歴
1
コードの加筆
test
CHANGED
File without changes
|
test
CHANGED
@@ -62,6 +62,12 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
+
//Mutexオブジェクト
|
66
|
+
|
67
|
+
pthread_mutex_t mutex;
|
68
|
+
|
69
|
+
|
70
|
+
|
65
71
|
|
66
72
|
|
67
73
|
pthread_t tid[THREAD_NUM]; // スレッドID を保持する配列
|
@@ -118,10 +124,14 @@
|
|
118
124
|
|
119
125
|
if (data[i][1] == 0){
|
120
126
|
|
127
|
+
pthread_mutex_lock(&mutex);
|
128
|
+
|
121
129
|
sum = sum + data[i][0];
|
122
130
|
|
123
131
|
data[i][1] = arg;
|
124
132
|
|
133
|
+
pthread_mutex_unlock(&mutex);
|
134
|
+
|
125
135
|
}
|
126
136
|
|
127
137
|
|
@@ -156,6 +166,12 @@
|
|
156
166
|
|
157
167
|
|
158
168
|
|
169
|
+
//Mutexオブジェクトの初期化
|
170
|
+
|
171
|
+
pthread_mutex_init(&mutex, NULL);
|
172
|
+
|
173
|
+
|
174
|
+
|
159
175
|
|
160
176
|
|
161
177
|
//指定された数のスレッドを作成する。
|
@@ -202,6 +218,36 @@
|
|
202
218
|
|
203
219
|
}
|
204
220
|
|
221
|
+
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
//i=0からdata[i][1]を調べて、それが0だったら、「作業」が済んでいないとみなして、data[i][0]の値をグローバル変数sumに加算する。
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
//「作業済み」として、data[i][1]にスレッドを区別する番号(例えば、1からTHREAD_NUMのどれか)を代入して次のiを調べる。
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
//iが DATA_NUM-1まで調べたら各スレッドは終了する。
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
//すべてのスレッドが終了したら、mainの中で、sumの値と、各スレッドがsumに何回加算したかを表示する。
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
//各スレッドがsumに何回加算したかは、data[i][1]を全部調べて、その値を表示してください。
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
//sumを正しく計算するために、グローバル変数sumへの加算時と、data[i][1]で作業済みかどうかのチェックなどで必要な排他制御を行うプログラムにしてください。
|
248
|
+
|
249
|
+
//DATA_NUMが100の場合、0から99の和ですから、4950が答えになるはずです。
|
250
|
+
|
205
251
|
```
|
206
252
|
|
207
253
|
### 発生している問題・エラーメッセージ
|