随笔buf

1、原子操作问题:

原代码:

int __atomic_add(int *ptr, int value)

{

  int_disable();

  *ptr += value;

    int_enable();

    return *ptr;

}

存在问题:ptr的操作没有在临界区中,return *ptr不是原子操作,可能在返回过程中被中断。

修正后的代码:

int __atomic_add(int *ptr, int value)

{

    int ret;

  int_disable();

  *ptr += value;

    ret = *ptr 

    int_enable();

    return ret;

}