可重入代码混淆

时间:2014-12-04 07:50:46

标签: c++ multithreading reentrancy

我试图准确理解重入代码的含义。我有这段代码:

void HWt::startElement(uint8_t HW, uint8_t val)
{
    writeBitsToregister(REG_VAL + HW*131072, 0, 3, val); //Write bits 0-2
    writeBitToregister(REG_VAL, 3, 1);  //Set bit 3 to 1
    writeBitToregister(REG_VAL, 3, 0); //Set bit 3 to 0
}

我必须确保所有位写入都是原子的。我被告知这不是可重入的。我可以理解如何使其线程安全,我可以使用互斥锁。

如何使其重入安全?另外,我不明白这里的重入意味着什么?同一个线程如何多次访问此函数?只有在ISR中调用或递归时才会发生这种情况吗?这些都不是。

1 个答案:

答案 0 :(得分:3)

可重入安全意味着该函数可以在执行时成功处理对其自身的“脱离上下文”调用。在现代操作系统中的非内核代码中,这通常意味着另一个线程将同时调用它,因此在这种情况下它等同于线程安全。

但是,例如在MS-DOS或内核代码中,函数执行时可能会发生中断,可能会自行调用该函数;这可能有奇怪的副作用,除非专门编写该函数以避免这种情况。

另请参阅:http://en.wikipedia.org/wiki/Reentrancy_%28computing%29