c++ - 尝试进入关键部分

标签 c++ windows critical-section

我不确定我是否理解正确。 TryEnterCriticalSection 只被调用一次,它不像EnterCriticalSection 那样粘? 例如。如果我写类似的东西

if(TryEnterCriticalSection (&cs))
{
//do something that must be synh
LeaveCriticalSection(&cs);
}
else
{
//do other job
}
//go on

并且如果 TryEnterCriticalSection 返回 false 部分 do something that must be synh 将永远不会完成,并且 do other job 部分将被执行然后继续

最佳答案

TryEnterCriticalSection() 执行以下操作:

  • 尝试进入临界区
  • 如果该部分当前被其他线程获取,则该部分不进入并且函数返回零,否则
  • 输入该部分且函数返回非零值

无论如何,函数永远不会阻塞。将其与 EnterCriticalSection() 进行比较,如果没有其他线程进入临界区,则失败,如果存在此类其他线程,则阻塞。

因此您的代码的结果将取决于调用函数时是否有另一个线程进入临界区。每次 TryEnterCriticalSection() 返回非零值(成功)时,不要忘记调用 LeaveCriticalSection()

是的,您的代码是根据正确的假设编写的。

关于c++ - 尝试进入关键部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829592/

相关文章:

"export"的 Windows 命令行替代方案

java - 当我从命令行启动 java 应用程序时,我可以防止数字签名警告吗?

c++ - 省略 for 循环值

c++ - 构造一个持有引用的 unordered_map 是否合法?

windows - Windows 上的驱动程序认证

c++ - 为什么我的线程被一个没有被任何东西占用的关键部分阻塞?

java - 尝试访问临界区的三种类型的线程

windows - 对于在 Windows 上运行的未阻塞线程等待执行,16 毫秒是否异常长?

c++ - 模拟一个显示器,在windows上获取视频流

c++ - 试图让 CUDA 7.5 与 GCC 5.x 一起工作