加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux的多线程编程的高效开发经验

发布时间:2016-01-26 08:25:17 所属栏目:Linux 来源:网络整理
导读:简介:本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验, 用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿 插一些 Windo

/* get the current time */
  struct timeval now;
  gettimeofday(&now, NULL);


  /* add the offset to get timeout value */
  abstime ->tv_nsec = now.tv_usec * 1000 + (dwMilliseconds  % 1000) * 1000000;
  abstime ->tv_sec = now.tv_sec + dwMilliseconds /  1000;

Linux 的绝对时间看似简单明了,却是开发中一个非常隐晦的陷阱。而且一 旦你忘了时间转换,可以想象,等待你的错误将是多么的令人头疼:如果忘了把 相对时间转换成绝对时间,相当于你告诉系统你所等待的超时时间是过去式的 1970 年 1 月 1 号某个时间段,于是操作系统毫不犹豫马上送给你一个 timeout 的返回值,然后你会举着拳头抱怨为什么另外一个同步线程耗时居然如 此之久,并一头扎进寻找耗时原因的深渊里。

正确处理 Linux 平台下的线程结束问题

在 Linux 平台下,当处理线程结束时需要注意的一个问题就是如何让一个线 程善始善终,让其所占资源得到正确释放。在 Linux 平台默认情况下,虽然各 个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是 已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用 pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。 Pthread_join() 函数的定义如清单 9 。

清单 9. pthread_join 函数定义

int pthread_join(pthread_t th, void  **thread_return);

调用该函数的线程将挂起,等待 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 函数定义

int pthread_detach(pthread_t th);

另一种方法是在创建线程时就将它设置为 detached 状态,首先初始化一个 线程属性变量,然后将其设置为 detached 状态,最后将它作为参数传入线程创 建函数 pthread_create(),这样所创建出来的线程就直接处于 detached 状态 。方法如清单 11 。

清单 11. 创建 detach 线程代码实例

…………………&hell ip;…………… ..
  pthread_t    tid;
  pthread_attr_t attr;
  pthread_attr_init(&attr);
  pthread_attr_setdetachstate(&attr,  PTHREAD_CREATE_DETACHED);
  pthread_create(&tid, &attr, THREAD_FUNCTION,  arg);

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读