質問編集履歴

1

コードの加筆

2021/06/16 06:43

投稿

Savanof
Savanof

スコア33

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
  ### 発生している問題・エラーメッセージ