使用多线程编程时,线程经常会访问共享资源,但在程序退出时,要在合适的时间释放这些资源,避免线程对资源的访问还未结束时,资源已经被释放造成异常,或者造成内存溢出,资源没释放等其他问题。单个线程的运行时安全退出和多线程安全退出原理是一样的,通过一个退出事件来通知主线程可以正常释放共享资源,区别是多了一个资源计数器,保证所有的线程都已经不再访问资源了。
书中的图示给表示的非常清楚。
线程不安全退出示意图:
线程安全退出示意图:
多线程退出算法 实现:(在工作中可以直接使用此退出算法)
// 这些函数也可以封装在类中
typedef struct MTASK_tag
{
LOCK pLock;
EVENT pExitEvent;
UINT uExitFlag;
UINT uTaskCount;
} MTASK;
MTASK* MTASK_Create()
{
MTASK* pMTask;
pMTask = (MTASK*