0

我正在试验 FASM 以提高我对并发性的理解。我创建了一个程序,它有两个线程,每个线程都产生一定数量的lock xadd. 我在 i7 上的 Win7 64bit 上运行它,我得到了非常有趣的结果。虽然程序本身可以正常工作,但它加载了 4 个内核而不是我预期的两个内核。

任务管理器的“性能”显示清晰的 4 核负载 在此处输入图像描述

资源监视器的 CPU 选项卡显示我的进程有两个线程

有人可以提示为什么会发生这种情况吗?有没有办法判断哪个内核当前正在运行我的 FASM 程序中的一段代码(只是为了确保内核确实不同)?

format PE console
include 'win32ax.inc'
include 'macro32.inc'
entry main

section '.code' code readable executable
main:
        invoke CreateThread, 0, 0, atomic_inc, 0, 0, 0
        mov [threadHandle], eax
        call atomic_inc
        invoke WaitForSingleObject, dword[threadHandle], 0xFFFFFFFF

        ;cinvoke printf, "B - %u", dword [myInt]

        invoke system, halt
        invoke exit, 0

        proc atomic_inc, lpParam
          mov ebx, 1000000000
          startloop:
            cmp ebx, 0
            jz endofloop
            push ebx

            ; Loop body
            mov eax, 1
            lock
            xadd dword [myInt], eax

            pop ebx
            dec ebx
            jmp startloop
          endofloop:
          ret
        endp


section '.data' data readable writable
        halt db "pause>null",0
        myInt dd 0
        threadHandle dd 0

section '.idata' import data readable
        library msvcrt, 'msvcrt.dll',\
        kernel, 'KERNEL32.DLL'

        import msvcrt,\
          system, 'system',\
          printf, 'printf',\
          exit, 'exit'

        import kernel,\
          CreateThread, 'CreateThread',\
          WaitForSingleObject, 'WaitForSingleObject',\
          Sleep, 'Sleep'
4

0 回答 0