Общая память между потоками на уровне сборки - PullRequest
0 голосов
/ 21 марта 2019

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

...