ある時点からほぼ同時に 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 になった場合にのみ実行されます。このコードにレースなどの問題はありますか? これがこれを行う方法であるかどうかさえわかりません。