相关疑难解决方法(0)

通过内联汇编锁定内存操作

我是低级别的新手,所以我完全忘记了你可能面临的问题,我甚至不确定我是否理解"原子"一词.现在我试图通过扩展程序集围绕内存操作进行简单的原子锁.为什么?为了好奇.我知道我在这里重新发明轮子,可能会过度简化整个过程.

这个问题? 我在这里提供的代码是否实现了使内存操作既线程安全又可重入的目标?

  • 如果它有效,为什么?
  • 如果它不起作用,为什么?
  • 还不够好?我应该在C中使用register关键字吗?

我只想做...

  • 在内存操作之前,锁定.
  • 记忆操作后,解锁.

代码:

volatile int atomic_gate_memory = 0;

static inline void atomic_open(volatile int *gate)
{
    asm volatile (
        "wait:\n"
        "cmp %[lock], %[gate]\n"
        "je wait\n"
        "mov %[lock], %[gate]\n"
        : [gate] "=m" (*gate)
        : [lock] "r" (1)
    );
}

static inline void atomic_close(volatile int *gate)
{
    asm volatile (
        "mov %[lock], %[gate]\n"
        : [gate] "=m" (*gate)
        : [lock] "r" (0)
    );
}
Run Code Online (Sandbox Code Playgroud)

然后像:

void *_malloc(size_t size)
{
        atomic_open(&atomic_gate_memory);
        void *mem = malloc(size);
        atomic_close(&atomic_gate_memory); …
Run Code Online (Sandbox Code Playgroud)

c memory assembly memory-management locking

3
推荐指数
1
解决办法
1214
查看次数

标签 统计

assembly ×1

c ×1

locking ×1

memory ×1

memory-management ×1