- CRITICAL_SECTION cs;//全局临界区
- class Lock//加-解锁
- {
- public:
- Lock()
- {
- EnterCriticalSection(&cs);
- }
- ~Lock()
- {
- LeaveCriticalSection(&cs);
- }
- };
- //宏,注意考虑展开后的代码
- #define Get(x,y) inline x Get##y(){Lock l; return m.##y;}
- #define Set(x,y) inline void Set##y(x t){Lock l; m.##y = t;}
- #define Get_Set(x,y) Get(x,y) Set(x,y)
- class A
- {
- struct MM
- {
- int i;
- };
- MM m;
- public:
- A()
- {
- InitializeCriticalSection(&cs);
- }
- ~A()
- {
- DeleteCriticalSection(&cs);
- }
- Get_Set(int,i);
- };
- int main(array<System::String ^> ^args)
- {
- A a;
- a.Seti(10);
- cout<<a.Geti();
- getchar();
- return 0;
- }
- 结果为:10
使用上面方法后,对对象成员的操作多有加-解锁操作,在多线程的情况下可能有好处。
注:本文参照了DirectX中DXUT的构架