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;
}