Zak*_*kir 0 c embedded multithreading
这个问题被作为半导体公司技术面试的起点.我想没有正确的答案 - 这个开放式问题的目的是衡量工程师的深度和舒适度.问题: - 设计一个监控地址的API,并在地址包含特定值时返回: -
void reach_target_value(volatile int* addr, int value);
Run Code Online (Sandbox Code Playgroud)
我天真的解决方案是这样的: -
void reach_target_value(volatile int* addr, int value)
{
while(*addr != value)
{
//Do nothing - spin in a tight loop
}
}
Run Code Online (Sandbox Code Playgroud)
现在显然在多处理/多线程环境中,如果在执行进程/线程被上下文切换时地址恰好达到目标值,则可能错过返回.在这种情况下,如何增强代码以确保它在多线程环境中运行良好,其中多个线程将监视具有不同目标值的相同地址?感谢您阅读 - 感谢您的建议 - 代码 - 指针!
这真的是一个可以(正如你所假设的)以最广泛的方式回答的问题.这个面试问题的关键不在于你的答案(你得到的先决条件,你无论如何都无法回答) - 而是你的澄清问题,你是否有方法和技巧来通过越来越详细的问题包围问题来追查问题.
可能的答案范围从你的"天真"忙等待方法,这可以是一个完全有效的解决方案,例如,等待中断的AVR Tiny,并且绝对没有别的事可做,超过使用计时器任务经常观看更改mprotect在嵌入式Linux系统上使用以观察变量"在硬件中"并在某些代码写入该内存时立即接收信号(以及许多其他方法来解决该问题).
做事的"正确方式"取决于你的面试官实际期待你提出的大量先决条件,(并且没有答案,没有可能的答案)
mprotect?相关:我们是否有任何可以帮助我们的硬件,如MMU或硬件观察点支持?总而言之:面试官绝对不会期待看到代码 - 他们希望听到你的澄清问题以及你能够解决问题的能力,最终提出一个可行的(明显简单的)问题解决方案.我实际上觉得这是一个非常好的面试问题.