读书人

临界区能在不同的代码块运用吗

发布时间: 2012-10-25 10:58:57 作者: rapoo

临界区能在不同的代码块使用吗?
class A{
CRITICAL_SECTION cs;
int a1;
A()
{
InitializeCriticalSection(&cs);//初始化
}
void test()
{
EnterCriticalSection(&cs);
a1 = 100;
......
LeaveCriticalSection(&cs);
}
}

main()
{
A aa;
EnterCriticalSection(&aa.cs);
a1 = 200;
......
LeaveCriticalSection(&aa.cs);
}

一个线程执行到A.test修改A.a1等灯受到临界区cs的保护,另一个线程执行main的代码修改a1等,也加入了临界区保护。这种情况,a1等数据能受到同步保护吗?

[解决办法]
new出来的A可行,这种在本地栈上面的,可能只有本地线程看得到
[解决办法]
临界区可以是局部变量,可以是全局变量,可以是从堆上分配,只要保证作用域和生存期。
楼主的代码2个临界区白加了。应该是多个线程使用同一个临界区来实现对共同资源的访问同步
[解决办法]
可以的,临界区不认识你要保护的对象。只知道,要互斥访问临界区。

读书人网 >C++

热点推荐