程序集级别上线程之间的共享内存

时间:2019-03-21 18:12:10

标签: multithreading assembly nasm shared-memory

所以我有C语言的程序,该程序使用pthread库创建线程并调用以汇编语言编写的函数。

我的问题是: 如何获得运行汇编代码的线程之间的共享内存?

我知道我可以传递指针

typedef struct{
    int *value;
    } t_data;

static int global_value = 0;

int main(){
    t_data td;
    td.value = &global_value
    //creating threads in loop or something with id declared
    pthread_create(id, NULL, &assembly_foo, (void*)&td)
    assembly_foo((void*)&td)
    //joining threads
}

因此在组装级别,两个线程都可以增加global_value的值:

global assembly_foo

section .text

assembly_foo:
    mov rsi, [rdi]
    lock inc dword[rsi]
    ret

问题是-我想做类似的事情,但不要传递任何参数。 据我所知,每个线程的寄存器和堆栈都是不同的。 以后我在C语言中不需要此值,我只需要一些(编译时常量)共享字节即可实现某种类型的自旋锁/互斥量,以便可以同步线程。

0 个答案:

没有答案