我不确定我是否理解正确。 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/