博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux程序设计——线程
阅读量:4094 次
发布时间:2019-05-25

本文共 1276 字,大约阅读时间需要 4 分钟。

Linux程序设计—线程

线程是一个进程内部的一个控制序列,可以理解为:线程是运行在进程上下文中的逻辑流。

线程是由内核自动调度的,它们有自己的线程上下文,上下文中记录了线程正常运行所需要的状态,比如:唯一的线程ID,栈,栈指针,程序计数器,通用目的寄存器和条件码。

多个线程可以运行在单一进程的上下文中,所以它们共享该进程虚拟地址空间的所有内容,比如:代码、数据、堆、共享库和打开的文件。

但是,一定要搞清楚fork系统调用和创建新进程之间的区别。

进程执行fork调用时,将创建出该进程的一份新副本,这个新的进程拥有自己的变量和PID,它的时间调度是独立的,执行几乎完全独立于父进程。

当在进程中创建一个新的线程时,新的执行线程将拥有自己的栈(因此也有自己的局部变量),但是会和它的创建者共享全局变量、文件描述符、信号处理函数和当前目录状态。

在简单点,可以认为,一个程序是一个进程,而这个进程的运行由多个线程组成。

线程执行模型

线程的执行是不同于进程的,它不是按照严格的父子层次来组织的。和某一个进程相关的线程,它们组成了线程池,而这个线程池的主要影响是:一个线程可以杀死它的任何对等线程,或者等待它的任意对等线程终止。另外,每个对等线程都能读写相同的共享数据。

并发线程执行图:

这里写图片描述

线程函数

创建线程:

#include
typedef void *(func)(void *);int pthread_create(pthread_t *thread,pthread_attr_t *attr, func *f,void *arg)

线程被创建时,*thread中将被写入一个标识符,我们用该标识符来引用新线程。

*attr用来改变新线程的属性。
*f,新线程将要执行的函数的入口地址。
*arg,用来做线程执行的函数的参数变量。

新线程如何获取自己的线程ID:

#include
pthread_t pthread_self(void);

终止线程:

一个线程是以下列方式之一来终止的:
1、当顶层的线程例程返回时,隐式终止;
2、调用pthread_exit函数,显示终止。

#include
void pthread_exit(void *thread_return);

另一个对等线程通过以当前线程的ID作为参数,调用pthread_cancle函数来终止当前线程。

#include
Int pthread_cancle(pthread_t tid);

回收已终止线程的资源:

#include
Int pthread_join(pthread_t tid,void **thread_return);

pthread_join 函数会阻塞,只到编号为 tid 的这个线程终止,把线程例程返回的 (void*) 指针赋值为 thread_return 指向的位置,然后回收已终止线程占用_的所有存储器资源。

以上就是线程的简单介绍。

转载地址:http://xpxii.baihongyu.com/

你可能感兴趣的文章
《python+opencv实践》四、图像特征提取与描述——31 Shi-Tomasi 角点检测& 适合于跟踪的图像特征
查看>>
OpenCV meanshift目标跟踪总结
查看>>
人工神经网络——神经元模型介绍
查看>>
人工神经网络——感知器介绍
查看>>
人工神经网络——反向传播算法(BackPropagation)
查看>>
进程的地址空间概述
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
Win32程序之进程的原理
查看>>
C++虚函数原理
查看>>
MySQL的索引
查看>>
今天,Python信息量很大!
查看>>
Flash 已死,Deno 当立?
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
程序员:凭自己能力吃饭,有什么理由瞧不起?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
副业过万的程序员都知道的网站有哪些
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>