所以我有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语言中不需要此值,我只需要一些(编译时常量)共享字节即可实现某种类型的自旋锁/互斥量,以便可以同步线程。