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

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

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

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

  按照我自己的话来讲,一个线程就是一个能够独立运行的程序。三条线程就是三个独立运行的程序,在宏观上来看,相当于用一个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. python --> 递归 以及装饰器

    一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...

  2. D3.js学习(四)

    上一节我们已经学习了线条样式和格栅的绘制,在这一节中我们将要根据之前绘制的线条对图表进行填充,首先来看一下我们的目标吧 在这个图表中,我们对位于线条下面的空间进行了填充,那么,如何改做到呢? 设置填充 ...

  3. AD域的安装(在Windows Server 2003中安装Active Directory)

    在Active Directory中提供了一组服务器作为身份验证服务器或登录服务器,这类服务器被称作域控制器(Domain Controller,简称DC).建立一个AD域的过程实际就是在一台运行Wi ...

  4. 对AutoIt中控件和窗口的理解

    经过尝试,对AutoIt中Control和Window有了新的认识,分享一下 1.Control 现在我想对一个WinForm架构的应用程序进行自动化操作,得到控件Advanced Mode属性为[N ...

  5. Python学习笔记—Python基础1 介绍、发展史、安装、基本语法

    第一周学习笔记: 一.Python介绍      1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  6. Python中两种处理错误方法的比较

    我所说的处理错误的方法,其实是try:,except和raise这两种. 首先抛出一个实例, dictt={'a':1,'b':2,'c':3} try: if dictt['d']>1: #字 ...

  7. github with msysgit:配置SSH Key

    Step 1: Check for SSH keys First, we need to check for existing ssh keys on your computer. Open up G ...

  8. signalr 配置错误跟踪

    <system.diagnostics> <trace autoflush="true" indentsize="4"> <lis ...

  9. phpcurl类

    1.需求 了解curl的基本get和post用法 2.例子 <?php class Curl{ private $timeout=30; public function set_timeout( ...

  10. [ActiveMQ]初识ActiveMQ

    初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:htt ...