Итак, у меня есть программа на 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 позже, мне просто нужны некоторые (постоянные времени компиляции) разделяемые байты для реализации своего рода спин-блокировки / мьютекса, чтобы я мог синхронизировать потоки.