gpt4 book ai didi

c++ - 可重入代码困惑

转载 作者:行者123 更新时间:2023-11-30 02:42:16 26 4
gpt4 key购买 nike

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

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 或递归中调用它时才会发生这种情况吗?这些都不是。

最佳答案

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

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

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

关于c++ - 可重入代码困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27288790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com