线程是计算机中独立运行的最小单位。每一个线程占用的CPU时间是由系统分配的,所以能够把线程当作操做系统分配CPU时间的基本单位。每一个线程只有在系统分配给它的时间片内才能取得CPU控制权,执行线程中的代码。多线程

Linux操做系统在一个进程内生成多个线程。多线程和多进程相比,拥有如下优势:函数

(1)进程都有独立的地址空间,建立新进程要耗费时间为期分配系统资源,而线程共享进程的地址空间,因此建立线程花费的时间要少得多。this

(2)系统调度方面,因为进程地址空间独立而线程共享地址空间,因此线程间的切换速度要远远快过进程间的切换速度。操作系统

(3)通讯机制方面,进程间的数据空间相互独立,彼此通讯要以专门的通讯方式进行,且必须通过操做系统。而多线程共享共享数据空间,一个线程的数据能够直接提供给其余线程使用,而没必要通过操做系统。所以,线程间的通讯更加方便省时。线程

虽然线程在进程内部共享地址空间、打开的文件描述符等资源。可是线程也有其私有的数据信息,包括:指针

(1)线程ID:每一个线程都由一个惟一的线程号。

code

(2)寄存器(包括程序计数器和堆栈指针)。blog

(3)堆栈进程

(4)信号掩码资源

(5)优先级

(6)线程私有的存储空间

Linux下的多线程程序,须要使用头文件pthread.h,连接时须要使用库libpthread.a。

在主线程里建立线程,程序就会在建立线程的地方产生分支,变成两个程序执行。这彷佛和多进程同样,其实否则。子进程时经过拷贝父进程的地址空间来实现的;而线程与进程内的其余线程共享程序代码,一段代码能够同时被多个线程执行。

线程的建立经过函数pthread_create来完成,声明以下:

#include

int pthread_create(pthread_t *thread, pthread_attr_t * attr, void* (*start_routine)(void *),void *arg);

thread: 是一个指针,线程建立成功时,用以返回建立的线程ID

attr:指定线程属性,NULL表示使用默认属性

start_routine:函数指针,指向线程建立后要调用的函数。这个被线程调用的函数也称为线程函数。

arg:该参数指向传递给线程函数的参数。       线程建立成功时,pthread_create函数返回0,新建立的线程开始运行第3个参数所指向的函数,原来的线程继续运行。

线程的建立过程:

#include

#include

#include

#include

int * thread(void * arg)

{

pthread_t newthid;

newthid = pthread_self();

printf("this is a new thread, thread ID = %d\n", newthid);

return NULL;

}

int main(void)

{

pthread_t thid;

printf("main thread ,ID is %d\n",pthread_self());

if(pthread_create(&thid, NULL, (void *)thread, NULL) != 0) {

printf("thread creation failed\n");

exit(1);

}

exit(0);

}

运行结果:

c语言子线程的建立,C语言建立多线程相关推荐

  1. c语言主线程退出子线程,简单了解C语言中主线程退出对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于程序来说,如果主进程在子进程还未结束时 ...

  2. c语言子线程给主线程发信息,如何用C语言实现多线程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Windows操作系统,C语言实现多线程: #include #include DWORD APIENTRY ThreadOne ( LPVOID thr ...

  3. c语言停止线程,如何用C语言实现多线程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Windows操作系统,C语言实现多线程: #include #include DWORD APIENTRY ThreadOne ( LPVOID thr ...

  4. c语言 双线程,如何用C语言实现多线程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Windows操作系统,C语言实现多线程: #include #include DWORD APIENTRY ThreadOne ( LPVOID thr ...

  5. c语言三线程,如何用C语言实现多线程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Windows操作系统,C语言实现多线程: #include #include DWORD APIENTRY ThreadOne ( LPVOID thr ...

  6. c语言子函数返回值,C语言函数说明与返回值

    在学习C语言函数以前,我们需要了解什么是模块化程序设计方法. 人们在求解一个复杂问题时,通常采用的是逐步分解.分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解.程序员在 ...

  7. c语言中线程的特性,具有C 11多线程的特征库

    OP的问题引起了我的注意,因为通过多线程获得的加速数字运算是我个人名单上的顶级待办事项之一. 我必须承认,我对Eigen库的经验非常有限. (我曾经将3×3旋转矩阵的分解用于欧拉角,这在特征库中以一般 ...

  8. 守护线程C语言windows,C言语如何利用子线程刷新主线程

    C言语如何利用子线程刷新主线程 你知道C言语如何利用子线程刷新主线程吗?使用子线程进行时间操作和加法操作,然后刷新主线程的控件显示结果.下面是小编为大家带来的关于C言语如何利用子线程刷新主线程的知识, ...

  9. c++thread里暂停线程_C语言如何正确的终止正在运行的子线程

    最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使 ...

最新文章

  1. 2D池化IPoolingLayer
  2. 一文详解脑科学研究与产业发展方向
  3. python 3 递归调用与二分法
  4. 选择 Reac​​tJS 的五大理由
  5. nginx 知识点 :ctx_index and index
  6. drupal建站系统_容器将如何塑造Drupal生态系统
  7. centos7.6(腾讯云)开放端口及配置腾讯云安全组
  8. FRR BGP协议分析12 -- ZEBRA路由的处理1
  9. 批处理注释bat注释一行_注释和注释处理器入门指南
  10. matlab计算方差和平均值,matlab求平均值和方差
  11. Django~1 一 什么是web框架?
  12. NeRF 神经辐射场
  13. Springboot毕设项目查听课管理系统zkb6w(java+VUE+Mybatis+Maven+Mysql)
  14. 香港地图、行政区划地图辖区边界、沙田
  15. Like What Y ou Like: Knowledge Distill via Neuron Selectivity Transfer(2017)------论文阅读笔记
  16. JAVA 定时器的Cron表达式详解
  17. 链接库问题:LD_LIBRARY_PATH(找不到共享库)
  18. phpstudy环境下laravel项目,Nginx报错CreateFile failed
  19. C语言:学生信息管理系统(详解+源码)
  20. tc网络流控详解及常用队列

热门文章

  1. jquery 在兄弟节点前、或兄弟节点后添加最新元素
  2. 【数字化】数字经济的关键,是实体企业与新技术融合;绝大多数传统企业熟视无睹的数字化...
  3. 以太坊Geth RLP编码源码解析
  4. 以太坊源码学习—RLP编码
  5. 主流手机参数(不定期更新)
  6. Launcher负一屏(二)----引入其它资源替换Google原生负一屏界面
  7. 世界500强华电集团:“远程集控 少人维护”,智能乌江水电管理从锐捷无线网开始...
  8. 高德地图之定位篇-----定位、预测天气、围栏、搜索周边、行踪轨迹
  9. mysql创建数据库和权限设置_mysql创建数据库和用户以及设置用户与权限
  10. 有没什么便签App可以用闹钟提醒该做什么