线程终止和临界区的退出
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?