在 C++ 中输入关键部分和上下文切换



我是线程编程的新手(目前需要在公司项目中使用 win32 和 c++),我只想问进入关键部分是否意味着没有上下文切换? 这是否意味着线程将锁定资源,直到它离开关键部分?

另外,我目前正在阅读"Win32 中的多线程应用程序"一书,看起来不错,但是有没有一本更好阅读和更新的书供新手在 win32 中学习线程?

提前^_^非常感谢

你只是一个用户模式进程,无法阻止操作系统上下文切换到另一个进程。这意味着在第一个线程离开关键部分之前,进程中没有其他线程可以进入关键部分。

来自MSDN(强调我的):

线程使用 EnterCriticalSectionTryEnterCriticalSection 函数请求关键部分的所有权。它使用 LeaveCriticalSection 函数来释放关键部分的所有权。如果关键部分对象当前由另一个线程拥有,则EnterCriticalSection无限期地等待所有权

再一次,EnterCriticalSection说:

等待指定关键部分对象的所有权。当调用线程被授予所有权时,该函数返回。

回答"这会阻止线程之间的上下文切换"的问题。不。嗯,不是真的。假设您有两个线程,ABA 呼叫EnterCriticalSection并进入 CS。当他在 CS 中使用共享资源时,操作系统仍然可以上下文切换到线程 BB 将继续像以前一样奔跑,直到他接到EnterCriticalSection电话,此时他将阻止。

现在如何实现此阻止实际上取决于Windows。 但最有可能的是,而不是"旋转"(我可以进入吗?不。现在?不。现在?没有。操作系统会将该线程置于"阻塞"队列中,并且在他正在等待的东西(CS)可用之前不调度线程。到那时,他将被安排,对EnterCriticalSection的召唤将成功。

参见

  • MSDN:使用关键节对象
  • 维基百科:关键部分

相关内容

  • 没有找到相关文章

最新更新