Pthreads 多线程编程基础
1. 限时等待线程结束
在多线程编程中,有时我们希望等待目标线程结束,但不想无限期地等待,即设置一个最大等待时间。这可以通过pthread_timedjoin_np(3)这个 API 来实现。
该 API 的前两个参数与pthread_join相同,第三个参数则以绝对时间(Unix 时间,即从 1970 年 1 月 1 日午夜开始经过的秒数和纳秒数)指定超时时间。timespec数据结构的格式如下:
struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ };要获取更多关于如何指定 Unix 时间的信息,可以参考pthread_timedjoin_np(3)的手册页。
需要注意的是,使用pthread_timedjoin_np(3)时可能会出现问题。例如,当 join 操作超时时,可能会释放一些资源,而此时工作线程可能仍在使用这些资源,这会导致程序出现错误。通常,建议对所有工作线程使用阻塞式的 join 操作,确保它们都终止后再释放资源。另外,带有_np后缀的 API 是非可移植的,仅适用于 Linux 系统。
2. 线程的可连接性
线程有两种状态:分离状态和可连接状态。 <