|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 thinkfunny 于 2019-9-20 14:15 编辑 # R, k* S/ ]8 [, X3 @( z$ e' s9 F
3 X# B; M6 h F! ^
线程概念
: b1 j% H2 }* g7 G- |
4 H2 l, c2 Y5 ^4 M0 Z( K4 c" h 线程是指运行中的程序的调度单位。一个线程指的是进程中一个单一顺序的控制流,也被称为轻量级线程。它是系统独立调度和分配的基本单位。同一进程中的多个线程将共享该系统中的全部系统资源,比如文件描述符和信号处理等。一个进程可以有很多线程,每个线程并行执行不同的任务。
2 Y o$ B6 U, l& m8 X7 w$ G6 _, U3 X2 \
线程与进程比较% r9 D) }. [8 \ S5 y8 ~- R
. {9 D( |2 K( e4 l0 a- r) g ① 和进程相比,它是一种非常“节俭”的多任务操作方式。在Linux系统中,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护其代码段、堆栈段和数据段,这种多任务工作方式的代价非常“昂贵”。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且线程间彼此切换所需要时间也远远小于进程间切换所需要的时间。
& ^+ }! i2 z; y, W3 n
\+ |/ u! Q3 M5 ?7 c ② 线程间方便的通信机制。对不同进程来说它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行。这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用,不仅方便,而且快捷。
8 t0 }' o7 d+ q* X# m0 m/ ], l- H. T& B
线程基本编程
5 ~7 Y: L- Q" ^' t/ _* D% b$ T% ]" G* `* ^
Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。因为pthread的库不是Linux系统的库,所以在编译时要加上 -lpthread。例如:gcc filename -lpthread。注意,这里要讲的线程相关操作都是用户空间中的线程的操作。
6 p$ S0 M2 s: d5 b V
% n/ w% p4 U% ^ z& @7 D1 s: X 线程创建:创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create()。在线程创建后,就开始运行相关的线程函数。; V( R# Z( n: [1 j' }3 I
) M& I, g4 S: R3 C0 a- l1 J/ u1 ^* Z% p
|
|