Linux中的线程中的线程
线程的概念
线程是程序执行时的最小单位,即CPU调度和分派的基本单位,一个进程可以由多个线程组成,同一个进程中的多个线程之
间共享此进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程
同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
线程有四方面特点:
1.线程有独立的堆栈段,共享地址空间,开销较小,切换速度较快。
2.线程间的通信机制比较方便。
3.因为操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。线程使CPU系统更加有效。
4.线程改善了程序结构,避免了一些嵌套循环。
使用pthread_create()函数来创建线程,使用线程的时候有两点注意事项:
1.当多线程访问同一全局变量的时候,一定要加互斥量,也就是上锁。当然最后不要忘记了解锁。
2.正确处理线程结束的问题:因为一个线程的终止,线程的资源不会随线程的终止释放,我们需要调用pthread_join() 来获得
另一个线程的终止状态并且释放该线程所占的资源。
线程与进程的区别
地址空间:同进程中的线程共享此进程的地址空间,而进程之间则是独立的地址空间,是隔离的。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
健壮性:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线
程健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享
某些变量的并发操作,只能用线程不能用进程
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程
序中,由应用程序提供多个线程执行控制。
线程是处理器调度的基本单位,但是进程不是。
线程与进程的共同点:两者均可并发执行。
优缺点:
-线程执行开销小,但是不利于资源的管理和保护。
-进程执行开销大,但是能够很好的进行资源管理和保护。
线程基本编程
Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需
要使用库libpthread.a。因为pthread的库不是Linux系统的库,所以在编译时要加上 -lpthread。
例如:g++ -o main filename.cpp -lpthread。
1.线程创建pthread_create()
创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create()