编写多线程的一些注意

来源:互联网 发布:php 判断文件类型 编辑:程序博客网 时间:2024/06/14 10:32

1:线程是异步的,需要传入线程的数据,必须要在线程激活、或者在线程被创建之前赋值。绝对不要假设你的线程会等你。

2: 别将赌注压在线程竞争上。多线程竞争的因素有很多,比如处理器数量,进程的数量,以及当前的网络开销,当你开发多线程时,应该假定在任意时间点,在程序的任何语句

    内,每个线程可能睡眠一段不定的时间。

3:合作避免僵局(死锁),保证互斥量的调用顺序,不少死锁的产生是因为函数退出之前没释放互斥量。

4:避免优先级倒置,1完全避免实时调度;2涉及你的线程使不同优先级的线程使用不同的互斥量,不太可能必须某些ANSI C函数使用的互斥量;

     3使用优先级ceiling互斥量或优先级继承,这些是pthreads的可选特性,你不能为不是你建立的互斥量设置优先级协议,包括ANSI C函数的互斥量;

     4避免调用这样的函数:他可能锁住不是你创建的互斥量并提升互斥量的优先级.

5:绝不要在谓词之间共享条件变量,避免单个条件变量管理多个谓词条件。当你确实要使用谓词共享,最好使用pthread_cond_broadcast

6: pthread_cond_signal会比pthread_cond_broadcast需要线程自己处理假唤醒和拦截唤醒的问题。pthread_cond_broadcast唤醒所有条件变量阻塞的线程,然后判断谓词运行线程。

7:



原创粉丝点击