Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584524
  • 博文数量: 92
  • 博客积分: 5026
  • 博客等级: 大校
  • 技术积分: 1321
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-28 11:04
文章分类

全部博文(92)

文章存档

2011年(9)

2010年(17)

2009年(12)

2008年(54)

我的朋友

分类: LINUX

2008-11-22 11:42:42

linux里头多线程编程是经常用到的。
pthread 和 sempahore都有。
最近写代码,发现要注意了以下问题。
 
1.坚决贯彻执行检查返回值的原则。尤其是阻塞型的函数。比如pthread_cond_wait(),sem_wait()等,因为阻塞型的很容易被中断,所以需要人为的检查。否则会出现很多莫名奇妙并且难以检查的错误。
 
2.变量要初始化,包括pthread_mutex_t, pthread_cond_t等。以前发现在32平台上,初始化和不初始化好像没有什么区别,程序都能够正常运行。但是在64位的机器上可能就不行了。比如pthread_mutex_t就是这样的例子。64位系统上不初始化就会一直阻塞,无法获取互斥锁
 
3.遵循api,不要照习惯办事。比如pthread_exit()函数。在32位系统上,如果再main函数里面调用,它会等待所有子线程结束,然后再退出main函数。所以,经常在main函数里面调用pthread_eixt,等待所有子线程退出。但是在64位系统上,情况就有点不同了啊。同上,仍是再main里面调用pthread_exit,但是main会直接退出的,虽然此时它的子线程还再运行。这个时候,main函数栈上上面的变量就要被释放了,如果此时子线程还在使用该变量的话,那就出问题了。所以等待所有子线程退出是不能用pthread_exit这个方法的,而且api本身也没有说它有个这个功能的,需要自己处理的了,不说了。
 
总结:
严格遵守api,才能发现错误于未然。
阅读(1721) | 评论(0) | 转发(0) |
0

上一篇:一个面试题

下一篇:清辅音浊化规律

给主人留下些什么吧!~~