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

线程停止和临界区的退出

2012-12-29 
线程终止和临界区的退出windows,VC2010。在多线程环境下,多个线程争用1项数据,所以加上临界区保护。class DA

线程终止和临界区的退出
windows,VC2010。在多线程环境下,多个线程争用1项数据,所以加上临界区保护。
class DATA
{
  LINK *link;//初始化时创建数据并存放在这里
  CRITICAL_SECTION cs;
  DATA()
  {
    InitializeCriticalSection(&cs);//初始化临界区
    link = DBCREATE();//创建数据
  }
  LINK *GetLink()//获取数据
  {
    EnterCriticalSection(&cs);//进入临界区
    return link;
  }
  void PutLink()
  {
    LeaveCriticalSection(&cs);//离开临界区
  }
};

DATA data;
main()
{
  data.GetLink();
  ......//执行很多工作,耗时长短不等,约0.01毫秒-10秒
  ......//最主要问题是线程可能会被终止执行
  data.PutLink();
}

碰到的问题是,多线程环境中,一个正在执行的线程执行data.GetLink()后,进入临界区持有数据,可能会被上一级控制代码发出终止执行指令。

问题:线程执行data.GetLink()后,被终止执行后,是在何处终止执行?还是即使被终止也一定会执行到底直到data.PutLink()代码处?

如果被终止的线程不一定执行到data.PutLink(),则如何确保这个线程离开临界区并释放持有的数据?

执行的工作,最快耗时0.01毫秒左右。有没有一种锁,被线程持有后,如果线程被终止或销毁,则锁会被自动释放?
[解决办法]
try-finally Statement?

热点排行