首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-10-25 
临界区能在不同的代码块使用吗?class A{CRITICAL_SECTION csint a1A(){InitializeCriticalSection(&cs)

临界区能在不同的代码块使用吗?
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个临界区白加了。应该是多个线程使用同一个临界区来实现对共同资源的访问同步
[解决办法]
可以的,临界区不认识你要保护的对象。只知道,要互斥访问临界区。

热点排行