在我的多線程服務器中,我有somefunction()
,它需要使用EnterCriticalSection
來保護兩個彼此獨立的其他全局數據。使功能異常安全
somefunction()
{
EnterCriticalSection(&g_List);
...
EnterCriticalSection(&g_Variable);
...
LeaveCriticalSection(&g_Variable);
...
LeaveCriticalSection(&g_List);
}
遵循更好的程序員的建議我打算使用RAII包裝。例如:
class Locker
{
public:
Locker(CSType& cs): m_cs(cs)
{
EnterCriticalSection(&m_cs);
}
~Locker()
{
LeaveCriticalSection(&m_cs);
}
private:
CSType& m_cs;
}
我的問題:它是確定改造somefunction()
這個? (把2個儲物櫃放在一個功能中):
somefunction()
{
// g_List,g_Variable previously initialized via InitializeCriticalSection
Locker lock(g_List);
Locker lock(g_Variable);
...
...
}
?
如果我始終保持相同的鎖定順序,那該怎麼辦? – maciekm
是的,但實踐表明,跨越任何不平凡的應用程序確實很難做到。 – tumdum