C++多线程,安全,快速的结束线程。解决方案

C++多线程,安全,快速的结束线程。
怎么在线程外结束线程?
-
线程外包别人的一个函数。
HasCodingEx();
这个函数运行很耗时间,3min。
-
1.TerminateThread()很明显,不安全,但是很快速。用了之后,出现了内存泄露。
2.用信号,效率不高。
怎么才能两全?

------解决方案--------------------
创建一个进程去跑这个函数。
------解决方案--------------------
TerminateThread()在仅仅是内存泄露问题。如果线程正在一个critical section,你结束他,将被锁定。
结束线程前先捕捉异常,再结束他。
------解决方案--------------------
各种pthread_cancel之类的函数都不应该被使用,尽量用条件变量+quit变量+mutex或者select+管道或者原子变量+信号。

看你线程本身的工作模型了。
------解决方案--------------------
那个进程是干什么的?
如果正在更新某个公用的数据结构,就会导致那个数据结构处于不一致的状态
如果使用了semaphore来控制对某个资源的访问,这样就可能导致其他任务无限等待