2009-08-27 12 views
0

CRITICAL_SECTION和CCriticalSection之間的關係是什麼? 是CCriticalSection封裝的CRITICAL_SECTION?CRITICAL_SECTION和CCriticalSection之間的關係是什麼

BTW:

我認爲下面的代碼是毫無意義,因爲CS不是全球,它鎖之前每時間的初步(),所以它不能鎖定XXX,是嗎?

int func 
{ 
CCriticalSection cs; 
cs.Lock(); 
XXX 
cs.Unlock(); 
} 

非常感謝!

回答

2

是的MFC CCriticalSection節只是一個Win32 CRITICAL_SECTION的包裝。

這幾乎適用於所有的MFC,它是圍繞標準Win32功能的一大套包裝類。

至於你的代碼示例,是的在該上下文中使用臨界區是沒有意義的。關鍵部分的作用類似於已命名的互斥體,它確保資源一次只能由單個線程訪問。使用不能由多個線程在同一時間內使用的資源時正確使用的一個關鍵部分將是由多個線程,然後訪問的對象:

MyGlobalCS.Lock(); 

// Do important work on resource 

MyGlobalCS.Unlock(); 

另外請注意,如果難以得到關鍵部分放入共享位置,您可以改用名爲mutex的替代方法。

+1

沒錯,值得注意的是它能*提供的一個真正有用的東西,RAII,它沒有。如果你使用C++和MFC,你真的需要考慮使用boost。 – 2009-08-27 03:30:30

+0

我會說'並排'而不是'代替',但提升並不能取代MFC所針對的大部分,即GUI。 – DeusAduro 2009-08-27 07:24:06

相關問題