我必须有办法让四个线程大致同时从某个点运行。例如
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 时才会执行 这段代码是否存在诸如race之类的问题?我什至不确定这是否是这样做的方法。