FASM并发增量和CPU负载

时间:2013-06-17 10:40:41

标签: assembly concurrency fasm

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

任务管理器的“性能”显示4个核心的明显负载 enter image description here

资源监视器的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'

0 个答案:

没有答案
相关问题