如何使用多个线程保护信号量队列

时间:2015-06-19 08:10:42

标签: multithreading operating-system binary-semaphore

在一次采访中我被问到......

<pre>fileName = _
Application.GetSaveAsFilename( _
InitialFileName:="my_file", _
FileFilter:="Text File (*.txt), *.txt, _
XML File (*.xml), *.xml")</pre>

以上是信号量等待实现(从其他线程复制)。 当多个线程尝试入队时(当它们无法获得锁定时),队列sem.L如何受到保护?在更新队列之前我们会锁定吗?

1 个答案:

答案 0 :(得分:1)

这是仅具有单个核心的系统的实现。通过在关键部分禁用中断来管理并发。那就是代码中的“DISABLE_INTS”和“ENABLE_INTS”。

除非你正在为一个为单核系统开发多任务操作系统代码的职位进行面试,否则这是一个奇怪的问题。也许面试官希望你提出有关代码的问题,看看你是否能理解在什么情况下这是有意义的。

只有在此核心或其他核心上运行的代码才会发生冲突。由于只有一个核心,唯一可能的冲突是运行此代理的代码。这需要上下文切换。

上下文切换有两种形式,自愿和非自愿。当代码明确要求时,会发生自愿上下文切换。此代码不要求上下文切换,因此这不是问题。非自愿上下文切换只能由中断触发,并且此代码禁用其关键部分中的中断。这是在单核系统的内核代码中实现“锁定”的典型方式。