EnterCriticalSection()和TryEnterCriticalSection()以及InitializeCriticalSection()和InitializeCriticalSectionAndSpinCount()之间的区别

时间:2016-10-04 09:52:23

标签: c++11 visual-c++ exception-handling operating-system synchronization

我认为TryEnterCriticalSection只能调用一次。所以我只想知道TryEnterCriticalSectionEnterCriticalSection之间的区别。

#include<windows.h>
CRITICAL_SECTION csOpsPrintData;

void CreateCriticalSectionAsNeccessary()
{

    InitializeCriticalSection(&csOpsPrintData);
    InitializeCriticalSectionAndSpinCount(&csOpsPrintData,5);

    EnterCriticalSection(&csOpsPrintData);
    TryEnterCriticalSection(&csOpsPrintData);

}

1 个答案:

答案 0 :(得分:2)

  

区别在于TryEnterCriticalSection立即返回,   无论是否获得关键部分的所有权,   而EnterCriticalSection阻塞,直到线程可以取得所有权   关键部分。

MSDN,Bing是你的朋友。

TryEnterCriticalSection也会返回一个值(而EnterCriticalSection不会返回),如果调用成功则返回非零值,因此线程声明了所有权。如果不是这样,则为零。