内核级线程阻塞时,内核完全可以调度同进程内的其它线程运行,也就是没有阻塞整个线程
姓名:王央京 学号:18050100052 学院:电子工程学院
转自:https://blog.csdn.net/qq_22847457/article/details/89371217
【嵌牛导读】本文介绍了Linux线程的相关信息
【嵌牛鼻子】Linux线程
【嵌牛提问】在了解Linux系统后,能否具体介绍线程的概念?
【嵌牛正文】
类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。一个进程可以有多个线程,这个进程本身也叫做线程只不过是主线程。通常主线程分配任务给子线程做。程序设计时候就可以某一时刻不止做一件事情,每一个线程处理各自独立的任务。
多个线程可以访问相同的存储地址空间和文件描述符。同一进程内的线程共享以下数据:全局内存、进程指令、打开的文件、信号处理函数和信号处置、当前工作目录、用户ID和用户组ID、大多数数据。每个线程有各自的线程ID、寄存器集合(包括程序计数器和栈指针)、栈、errono、信号掩码、优先级。
线程的优点有提高程序并发性、开销小和数据通信、共享数据方便等。线程的缺点有库函数不稳定、调试编写困难、gdb不支持、对信号支持不好等。除此之外,多线程内如果其中一个线程出现了 除0、野指针 等问题会造成该线程崩溃,进而导致整个进程终止。同时,线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随即退出。
从上述分析来看,线程的优点相对突出,缺点均不是硬伤。Linux下由于实现方法导致进程、线程差别不是很大。
线程有一套完整的与其有关的函数库调用,它们中的绝大多数函数名都以pthread_开头。为了使用这些函数库调用,我们必须定义宏_REENTRANT,在程序中包含头文件pthread.h,并且在编译程序时需要用选项-lpthread来链接线程库。其中常用的函数库如下:
1. pthread_self函数获取线程ID,其作用对应进程中getpid()函数。
2. pthread_create函数创建一个新线程,其作用对应进程中fork()函数。
3. pthread_exit函数将单个线程退出,其作用对应进程中exit()函数
4. pthread_join函数阻塞等待线程退出,获取线程退出状态其作用,对应进程中waitpid()函数。
5. pthread_cancel函数杀死(取消)线程其作用,对应进程中kill()函数。
6. pthread_detach函数实现线程分离。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)