Linux的多线程编程的高效开发经验
Linux 的绝对时间看似简单明了,却是开发中一个非常隐晦的陷阱。而且一 旦你忘了时间转换,可以想象,等待你的错误将是多么的令人头疼:如果忘了把 相对时间转换成绝对时间,相当于你告诉系统你所等待的超时时间是过去式的 1970 年 1 月 1 号某个时间段,于是操作系统毫不犹豫马上送给你一个 timeout 的返回值,然后你会举着拳头抱怨为什么另外一个同步线程耗时居然如 此之久,并一头扎进寻找耗时原因的深渊里。 正确处理 Linux 平台下的线程结束问题 在 Linux 平台下,当处理线程结束时需要注意的一个问题就是如何让一个线 程善始善终,让其所占资源得到正确释放。在 Linux 平台默认情况下,虽然各 个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是 已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用 pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。 Pthread_join() 函数的定义如清单 9 。 清单 9. pthread_join 函数定义
调用该函数的线程将挂起,等待 th 所表示的线程的结束。 thread_return 是指向线程 th 返回值的指针。需要注意的是 th 所表示的线程必须是 joinable 的,即处于非 detached(游离)状态;并且只可以有唯一的一个线程 对 th 调用 pthread_join() 。如果 th 处于 detached 状态,那么对 th 的 pthread_join() 调用将返回错误。 如果你压根儿不关心一个线程的结束状态,那么也可以将一个线程设置为 detached 状态,从而来让操作系统在该线程结束时来回收它所占的资源。将一 个线程设置为 detached 状态可以通过两种方式来实现。一种是调用 pthread_detach() 函数,可以将线程 th 设置为 detached 状态。其申明如清 单 10 。 清单 10. pthread_detach 函数定义
另一种方法是在创建线程时就将它设置为 detached 状态,首先初始化一个 线程属性变量,然后将其设置为 detached 状态,最后将它作为参数传入线程创 建函数 pthread_create(),这样所创建出来的线程就直接处于 detached 状态 。方法如清单 11 。 清单 11. 创建 detach 线程代码实例
(编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |