【linux多线程】自学笔记

来源:互联网 发布:事业单位上岸经验知乎 编辑:程序博客网 时间:2024/05/27 19:27

1.多线程运行顺序:
   单个进程内是顺序进行的。
   多线程中子线程的执行是在主线程有空闲的条件下。即,如果主线程忙,或者是没有执行等待那么,子线程是不会执行的。

   在用户看来,多个线程是同时执行的。
   从操作系统调度上看:
   单核单CPU:各个线程是交替执行的。系统不停地在各个线程之间切换,每个线程只有在系统分配给它的时间片内才能取得CPU的控制权,执行线程中的代码。
   多核多CPU:可并行,可交替。

2.线程终止:
   两种方法终止进程:第一种通过return从线程函数返回;第二种通过调用函数pthread_exit
                                       使线程退出。但是有两种特殊情况:
   第一种:在主线程中,如果从main函数返回或调用了exit函数退出主线程,整个进程终止,
                   此时进程中所有线程也终止。
   第二种:在主线程中,调用pthread_exit函数,仅仅是主线程消亡,进程不会结束,进程内
                   的其他进程不会终止,直到所有线程结束,进程才会结束。

3.线程终止时线程间的同步问题:
  一般情况下,
  进程中各个线程的运行独立;
  进程中各个线程的终止独立:不会相互通知,也不会影响其他线程。
  终止的线程所占用的资源不会随着线程的终止而归还系统,而是仍为线程所在的进程持有。

4.等待方:
  一个线程只能被一个线程等待,否则,第一个接收到信号的线程成功返回,其余调用pthread_join的线程返回错误代码。
  被等待方:
  被等待的线程应该处于可join的状态,即非DETACHED状态。处于DETACHED状态的线程无法由pthread_join同步。

5.私有数据:
  多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共有。
原创粉丝点击