同じスレッドを同時に5つ追加しています。スレッド関数は次のようなものです:同じデータにアクセスするループでマルチスレッドをロック
define MAX_NUM 1000;
int counter;
int isMax;
thread_function(){
while (isMax == 0) {
if (counter < MAX_NUM) {
counter++
} else {
isMax = 1;
}
}
}
と私はスレッドにロックを追加しようとしているので、一度に1つのスレッドだけがデータを変更します。
define MAX_NUM 1000;
int counter;
int isMax;
Lock *myLock;
thread_function(){
while (isMax == 0) {
lock_acquire(myLock);
if (counter < MAX_NUM) {
counter++;
} else {
isMax = 1;
}
lock_release(myLock);
}
}
何らかの理由で、何らかの理由で、これによって異なるスレッドが同時にカウンタを追加するのを止めることはありません。なぜこれが動作しないのか、それを修正する方法を教えてもらえますか?
私は 'lock_acquire'からの戻り値が何が間違っているのかを推測しているかもしれません。 –
あなたはまた、ロックなしで複数のスレッドから 'isMax'にアクセスしています。 –
あなたの 'lock_acquire'と' lock_release'関数がうまくいかないのでしょうか?完全なコードを投稿してください。 – nos