什么是多线程?或者说,什么是线程?

  按照书本上的描述,所谓线程,便是包含在进程内部的顺序执行流,是进程中实际运作的单位,也是操作系统能够进行调度的最小单位。

  一个进程中可以并发多条线程,每条线程并行执行不同的任务。

  在以往的单片机裸机编程中,程序的执行永远都有一个确定的路径,从开始到结束,完全是在我们的控制下……

  按照我自己的话来讲,一个线程就是一个能够独立运行的程序。三条线程就是三个独立运行的程序,在宏观上来看,相当于用一个CPU做了三个CPU的工作。

   ……
  线程与进程的关系:

  1.一个线程只能属于一个进程,而一个进程可以拥有多个线程,但必然有且只有一个住线程

  2.操作系统将资源分配给进程,一个进程中的所有线程共享进程中的资源

  3.线程不拥有资源,它是作为调度和运行的基本单位,进程作为拥有资源的基本单位

  为什么不用进程代替线程?

  1.进程作为拥有资源的基本单位,系统在创建活撤销进程的时候,都会耗费很大的开销,而线程的开销则要小得多。

  2.进程间通信很费劲,而线程由于资源共享,通信极为简单

  3.执行效率更高

  ——————————————————————————————————————————————————————————————

  创建线程

  在进程中创建一个线程的函数是pthread_create()

  原形:int pthread_create(pthread_t * thread, const pthread_attr * attr, void *(start_routine)(void *), void *arg)

  说明:如果线程创建成功,函数返回0,并将会立即执行。如果创建失败,函数返回一个非0的数

  参数:

  thread 用来指向创建新线程的ID

  attr用来设置线程的基本属性,如果是NULL,那么线程就使用默认属性

  start_routine是线程开始时所执行的函数,第四个参数arg就是他的参数

  线程终止

  终止一个线程可以使用函数pthread_exit()

  原形:pthread_exit(void * retval)

  参数是一个无类型的指针,可以将线程的返回值当做函数pthread_exit()的参数传入

  实战演练!!

  创建五个线程,分别打印出自己的线程ID

  代码如下:

  重点:在编译线程相关的代码时,要在编译选项中加上-pthread  

 #include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h> #define NUM_PTHREAD 5 void *fun(void *pthreadid)
{
int id; id=(int)pthreadid;
printf("线程ID为:%d.\n",id);
pthread_exit(NULL);
} int main(void)
{
pthread_t th[NUM_PTHREAD];
int ret,i; printf("进入主线程.\n");
for(i=;i<NUM_PTHREAD;i++)
{
printf("创建线程%d.\n",i);
ret = pthread_create(&th[i],NULL,fun,(void *)i);
if (ret != )
{
printf("线程%d创建失败.errno=%d.\n",i,errno);
return -;
}
}
printf("主线程退出!\n");
pthread_exit(NULL);
return ;
}

  编译之后,执行结果如下:

  

  注意:由于操作系统调度的线程随机性,执行结果可能与我的现象不一致!

  

Linux学习笔记(16)-多线程的更多相关文章

  1. Linux学习笔记16——wait函数

    wait函数的定义如下: #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *stat_loc); wai ...

  2. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  3. linux学习笔记2 - linux常用命令

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/5543731.html 第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装lin ...

  4. Linux 学习笔记之超详细基础linux命令(the end)

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 14---------------- ...

  5. Linux 学习笔记之超详细基础linux命令 Part 14

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 13---------------- ...

  6. Linux 学习笔记之超详细基础linux命令 Part 13

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...

  7. Linux 学习笔记之超详细基础linux命令 Part 9

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 8----------------- ...

  8. Linux 学习笔记之超详细基础linux命令 Part 7

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 6----------------- ...

  9. Linux 学习笔记之超详细基础linux命令 Part 1

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122   说明:主要是在REHL Server 6操作系统下进行的测试 --字符界面虚拟终端与图形界面之间的切 方法:[ ...

  10. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

随机推荐

  1. MySQL主从复制实现

    上回提到了用ThinkPHP框架来实现数据库的读写分离,现在就来简单说说MySQL的主从复制. 形式 一主一从(也就是这里要实现的形式) 主主复制 一主多从 多主一从(MySQL5.7开始支持) 联级 ...

  2. 表单元素的submit()方法和onsubmit事件

    1.表单元素中出现了name="submit"的元素 2.elemForm.submit();不会触发表单的onsubmit事件 3.动态创建表单时遇到的问题 表单元素拥有subm ...

  3. touch

    Linux touch 命令   在 Linux 下运用 touch 命令创建一个空文件.当然我们也可以使用其他命令例如 vi, nano 或是任意一个编辑工具来实现.但是你可能需要更多的步骤来完成操 ...

  4. vue2/vuex2的那点坑

    说是坑,其实大部分是我们自己的过错! vuex官方demo在1.0可以运行,在2.0报错?此类问题,应该很常见吧? 还有顺溜的利用1.0搭建的webpack编译环境到了vue2.0突然失效了,报错了? ...

  5. 使用Ruby来实现批量更新AD中字段

    准备工作 安装需要用到的gem gem install net-ldap gem install roo 准备好要更新的数据,比如exel表: /root/account.xlsx,内容如下 姓名 性 ...

  6. python基础八

    面向对象的好处 更容易扩展.提高代码使用效率,使你的代码组织性更强, 更清晰,更适合复杂项目的开发 封装 把功能的实现细节封装起来,只暴露调用接口 继承 多态 接口的继承 定义 类   ===> ...

  7. java 写文本换行

    import org.apache.commons.io.FileUtils; public static void main(String[] args) throws IOException { ...

  8. C#中base 关键字的作用

    引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的 ...

  9. excel链接sharepoint 用于 Excel 的 Microsoft Power Query

    https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=39379

  10. 那些PHP中没有全称的简写

    PHP中的GD库,全网没发现GD二字母的全称是什么,包括PHP.net,都搜不到GD.G应该是graphi,D是什么? die: 从php_mysql.dll到php_mysqli的变化,那个i是什么 ...