Thread::Semaphore
时间:2010-09-30 来源:snowtty
在perl里面等待没有detach的线程好说,直接join等待退出就可以了。但是对于被detach过的,就比较麻烦一点了。因为主函数退出的时候是不管被detach了的线程是否完成的,没有完成就强制杀死,可能会导致程序工作结果不对。可是detach线程又是不可避免的,我尤其喜欢这么做,主要原因是因为我懒,不想保存一个数组,然后去挨个儿去收割,麻烦啊。况且detach掉之后,线程结束时系统自动回收资源,更是美事一桩。 今天测试一个小程序的时候,想到既然一般使用信号量来控制并发线程数量,那么应该也可以用信号量作为事件,来等待线程结束啊。写了个脚本测试一下,确实可行。在所有线程创建完毕,主程序要退出之前,尝试获得最大线程数量个信号,无法获得的时候会阻塞,直到成功获得。这是因为一共创建了最大并发线程数个信号量,而一个线程占用一个信号量,线程退出的时候才释放。如果能够获得到原始个数,就表示所有线程都释放了,所有线程处理完毕,程序可以结束了。
|