0

ある時点からほぼ同時に 4 つのスレッドを実行する方法が必要です。例えば

thread 1 : mov eax,ebx, mov ecx, edx, [S], mov eax, edx, ...
thread 2:  sbb eax,ebx, [S], mov ecx, edx, ...
thread 3:  mov eax,ebx, xchg eax,ebx, cmp edx, ecx, [S], mov eax, ebx, ...
thread 4:  dec eax, sub eax,ecx, [S], ....

[S] は「同期ポイント」のプレースホルダーです。すべてのスレッドがこの時点に到達すると、ほぼ同時に開始されます。どうすればいいですか?

私が持っているコードは次のようなものです

number_of_threads 4

temp:
      dd 0            ;a 'synchronization variable'

スレッド 1 コード

;synchronization [S]

lock add [temp],0x1
wloop1:                 
cmp [temp], number_of_threads 
jne wloop1

スレッド 2 コード

;synchronization [S]

lock add [temp],0x1
wloop2:                 
cmp [temp], number_of_threads 
jne wloop2

スレッド 3 コード

;synchronization [S]

lock add [temp],0x1
wloop3:                 
cmp [temp], number_of_threads 
jne wloop3

スレッド 4 コード

;synchronization [S]

lock add [temp],0x1
wloop4:                 
cmp [temp], number_of_threads 
jne wloop4

このようにして、すべてのスレッドが [S] に到達し、そこからほぼ同時に開始するようにします。[S] に続くコードは、temp が number_of_threads になった場合にのみ実行されます。このコードにレースなどの問題はありますか? これがこれを行う方法であるかどうかさえわかりません。

4

1 に答える 1