精华内容
下载资源
问答
  • 线程是指进程内的一个执行单元也是进程内的可调度的实体,与进程的区别 1) 调度:线程作为调度分配的基本单位,进程作为拥有资源的基本单位 2) 并发性:不仅进程之间可以并发执行,同一个进程之间的多个线程可以并发...

    线程是指进程内的一个执行单元也是进程内的可调度的实体,与进程的区别

    1) 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

    2) 并发性:不仅进程之间可以并发执行,同一个进程之间的多个线程可以并发执行

    3) 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的资源

    4)系统开销: 在创建或撤销进程时,由于系统都要之分配和回收资源,导致系统的开销明显大于创建或撤销线程时的开销

     

    转载于:https://www.cnblogs.com/tian-sun/p/4308964.html

    展开全文
  • [cpp]view plaincopy ...每一个程序相当于一个进程,而一个进程之中可以有多个线程 */ #define_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<windows.h> #include<stdlib.h> #in...

     

    [cpp]view plain copy

     

    /* 

        每一个程序相当于一个进程,而一个进程之中可以有多个线程 

    */  

    #define _CRT_SECURE_NO_WARNINGS  

    #include<stdio.h>  

    #include<windows.h>  

    #include<stdlib.h>  

    #include<process.h>       //进程函数  

    void run(void *p)  

    {  

    int *temp = (int *)p;  

    char ch[50];  

        sprintf(ch, "线程%d启动", *temp);  

        MessageBoxA(0, ch, "多线程", 0);  

    }  

    void main()  

    {  

    for (int i = 0; i < 5; i++)  

        {  

    //第一个参数为函数的地址,第二个参数为栈的大小,0代表默认大小,第三个参数为函数的实参,必须为void*类型  

            _beginthread(run, 0, &i);   //多线程调用函数  

            Sleep(1000);  

        }  

        system("pause");  

    }  


    运行结果:开启五个线程!

     

     

    2 阻塞式进程

    [cpp] view plain copy
     

    #define _CRT_SECURE_NO_WARNINGS  

    #include<stdio.h>  

    #include<stdlib.h>  

    #include<windows.h>  

    #include<process.h>  

    void changeCMDtitle(void *p)  

    {  

    int i = 1;  

    char str[20];  

    while (1)  

        {  

            Sleep(1000);  

            sprintf(str, "title 程序运行的第%d秒", i);  

            system(str);  

            i++;  

        }  

    }  

    void endMultiThread(void *p)  

    {  

    int *px = (int *)p;     //指针转换  

    int i = 0;  

    while (1)  

        {  

    if (i > 5)  

            {  

                printf("%d\t%d\n", i, *px);  

                _endthread();   //结束线程,该程序执行完毕之后退出,如果是return的话,直接退出  

            }  

            Sleep(1000);  

            i++;  

        }  

    }  

    void main()  

    {  

        _beginthread(changeCMDtitle, 0, NULL);  

    for (int i = 0; i < 5; i++)  

        {  

    HANDLE hd = _beginthread(endMultiThread, 0, &i);        //hd相当于线程编号  

    //没有等待的情况下为多线程,五个线程同时进行  

            WaitForSingleObject(hd, INFINITE);      //等待模式,第二个参数代表无限期等待,for循环里边相当于单线程  

            Sleep(1000);                                //有Sleep的情况下每隔一秒endMultiThread函数相继关闭,否则,同时关闭  

        }  

        system("pause");  

    }  


    运行结果:WaitForSingleObject为阻塞式进程,当且仅当当前进程执行完毕之后才会进入下一进程,否则,无限等待。

    3 进程和线程之间的区别和联系

    进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。

    线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。
     
    说到这里,我们对进程与线程都有了一个大体上的印象,现在开始说说二者大致的区别。

    进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。这是进程宏观上的执行过程。而进程又可有单线程进程与多线程进程两种。我们知道,进程有 一个进程控制块 PCB ,相关程序段 和 该程序段对其进行操作的数据结构集 这三部分,单线程进程的执行过程在宏观上是线性的,微观上也只有单一的执行过程;而多线程进程在宏观上的执行过程同样为线性的,但微观上却可以有多个执行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。出了 CPU 之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。与进程控制表和 PCB 相似,每个线程也有自己的线程控制表 TCB ,而这个 TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。

    线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。
     
    1. 线程的执行特性。

    线程只有 3 个基本状态:就绪,执行,阻塞。

    线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。

    2. 进程通信。

    单机系统中进程通信有 4 种形式:主从式,会话式,消息或邮箱机制,共享存储区方式。

    主从式典型例子:终端控制进程和终端进程。

    会话式典型例子:用户进程与磁盘管理进程之间的通信。
     

    4 进程和线程之间的区别和联系(二)

     
    1.定义
    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
    线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

    2.关系
    一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
    相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

    3.区别
    进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
    1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
    2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
    3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
    4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
    4.优缺点
    线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
     

    5 多线程程序设计的八个规则

     

    6 多线程编程实例:

    [cpp] view plain copy
     

    #define _CRT_SECURE_NO_WARNINGS  

    #include<stdio.h>  

    #include<stdlib.h>  

    #include<windows.h>  

    #include<process.h>  

    int flag = 1;               //标志位,便于各进程之间进行通信  

    int *destPtr = NULL;        //所查找元素的目标地址,设置为NULL是为了避免野指针  

    struct MultiSearch{  

    int len;                //要查找的长度  

    int data;               //要查找的数据  

    int *beg;               //要查找的起始地址  

    int *sflag;             //标志位,便于各进程之间进行通信  

    int **addr;             //产地一个指针的地址  

    int index;              //进程编号  

    };  

    void find(void *ptr)  

    {  

    struct MultiSearch *pstruct = (struct MultiSearch *)ptr;  

    for (int *pbeg = pstruct->beg; pbeg != pstruct->beg + pstruct->len; pbeg++)  

        {  

            Sleep(30);                              //留出一些时间,让其他线程查找  

    if (*(pstruct->sflag) == 0)              //判断是否找到,如果找到,则终止程序  

            {  

                printf("本线程%d无能,其他线程已经找到。\n", pstruct->index);  

    return;                             //结束该线程,本线程以后的程序不再执行  

            }  

    if (pstruct->data == *pbeg)              //判断该元素是否和查找的元素相等,如果相等,则返回,其他进程也相应结束查找  

            {  

                printf("第%d个线程查找到该内容.\n", pstruct->index);  

                *(pstruct->sflag) = 0;               //标志位设为0;  

                *(pstruct->addr) = pbeg;         //将找到的地址赋予结构体内的元素  

    return;                             //结束进行  

            }  

        }  

        printf("本线程%d无能,没有找到该元素。\n", pstruct->index);  

    return;                                     //正常结束  

    }  

    void main()  

    {  

    int arr[1000] = { 0 };                      //从1000个数中查找num;  

    for (int i = 0; i < 1000; i++)               //为数组赋值  

            arr[i] = i + 1;  

    int num = 0;  

        printf("请输入要查找的数字(仅限于0到999的整数类型):");  

        scanf("%d", &num);  

    struct MultiSearch ms[10];                  //申请十个结构类型,为避免各个线程之间的数据交叉,使每个线程中的数据都是独立的  

    for (int i = 0; i < 10; i++)             //创建10个线程进行查找,每个线程查找其中的一百个元素  

        {  

            ms[i].beg = arr + i * 100;  

            ms[i].len = 100;  

            ms[i].data = num;  

            ms[i].sflag = &flag;  

            ms[i].addr = &destPtr;  

            ms[i].index = i;  

            _beginthread(find, 0, &ms[i]);  

            Sleep(50);                              //为创建进程留出时间  

        }  

        Sleep(3000);                                //等待查找结束  

        system("pause");                            //如果主线程结束了,则其他的线程也相应结束了,因此要为主线程预留足够多的时间  

        printf("\n%p, %d\n", destPtr, *destPtr);    //打印该元素的地址及其该地址所对应的数据  

        system("pause");  

    }  

     
    运行结果:
     
    [plain] view plain copy
     

    请输入要查找的数字(仅限于0到999的整数类型):888  

    本线程0无能,没有找到该元素。  

    第8个线程查找到该内容.  

    本线程7无能,其他线程已经找到。  

    本线程4无能,其他线程已经找到。  

    本线程1无能,其他线程已经找到。  

    本线程6无能,其他线程已经找到。  

    本线程3无能,其他线程已经找到。  

    本线程9无能,其他线程已经找到。  

    本线程5无能,其他线程已经找到。  

    本线程2无能,其他线程已经找到。  

    请按任意键继续. . .  

    1. 004CF894, 888  
    2. 请按任意键继续. . .  

     

    转载于:https://www.cnblogs.com/xiong63/p/6829427.html

    展开全文
  • 线程和进程的区别

    2021-01-02 18:16:06
    文章目录进程和线程的区别线程的优点创建一个线程中使用start() run() 两种方法的区别线程线程在什么场景下使用,以及多线程的优点特性。什么因素会影响多线程的效率常用API 进程和线程的区别 进程 : ...

    进程和线程的区别

    1. 进程 : 系统分配资源的最小单位
    2. 线程 :系统的调度的最小单位 ;每一个进程至少含有一个线程,即主线程(系统级别的,c语言的主线程),但是java级别的主线程即main方法;
    3. 进程有自己的内存空间地址,而线程只独享指令流执行的必要资源,比如寄存器和栈
    4. 由于同一进程的各线程间共享内存和资源文件,可以不通过内核进行直接通信,减少资源的消耗
    线程的优点
    1. 创建一个新的线程的代价比创建一个新进程小得多
    2. 与进程之间状态得切换相比,线程之间状态的转变需要操作系统耗费的资源要小的多
    3. 结束线程所需要的资源也比进程小的多
    4. 线程占用的CPU资源也比进程小的多
    5. 相比进程,可以充分利用多处理器的可并行数量

    创建一个线程中使用start() 和 run() 两种方法的区别

    1. 代码行在那个线程执行,就由那个线程执行代码行。
    2. start() 方法启动的是这个线程,告诉系统调度本线程。并不会影响其他方法的调用。会向系统申请启动某个线程,如果该线程处于运行状态,会自动调run()方法。run()方法会通过Thread或Runnable类,定义要执行的任务代码。申请系统调度线程。
    3. 若是直接调用run(),这就只是作为main方法中普通方法的普通调用,会直接在main线程中运行。线程执行的任务。

    多线程

    多线程在什么场景下使用,以及多线程的优点和特性。
    1. 提高性能和效率,并发并行的执行代码。(有些代码串行执行耗时太长)。
    2. 遇到阻塞任代码,而导致后续代码无法去执行的时候。我们可以使用多线程,让后续代码不受阻塞代码的阻塞而去执行。
    什么因素会影响多线程的效率
    1. 多线程的数量 。根据程序所需要的线程数量去设计多线程的数量
    常用API
    1. 静态方法: 作用在当前代码行所在的线程,一般作用于当前线程。eg : activeCount(): 获取当前线程组中的,还存在的线程数量。currentThread() : 获取代码行当前线程。 interrupted() : 测试线程是否被打断 。sleep() : 当前线程休眠。单位为ms。yield() : 让当前线程让步(让步就是从运行态转变成就绪态,让出CPU资源)
    2. 实例方法:作用在调用的线程对象上。
    展开全文
  • C语言线程编程-进程和线程的基本概念

    万次阅读 多人点赞 2019-04-04 00:29:40
    实验室项目采用多线程实现,然而暂时只涉及到几个基本的线程操作函数,线程和进程的区别、线程的同步和异步机制以及线程通信等暂时都没有涉及,打算在这里做些总结,以备后用。 1. 进程 是一种抽象的概念,从来没有...

    序言

    实验室项目采用多线程实现,然而暂时只涉及到几个基本的线程操作函数,线程和进程的区别、线程的同步和异步机制以及线程通信等暂时都没有涉及,打算在这里做些总结,以备后用。
    1. 进程

    是一种抽象的概念,从来没有统一的标准定义:

            1    进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动;
            2    进程是一个独立的可调度的活动;
            3    进程是可以并行执行的计算单位;
            4    进程是一个抽象实体,当它执行某个任务时,要分配和释放各种资源;

    通常定义:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。

        进程和程序是有本质区别的:
            程序是静态的。它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;
            进程是一个动态的概念。它是程序执行的过程,包括了动态创建、调度和消亡的整个过程;是程序执行和资源管理的最小单位。

    讲的简单点,以下代码执行时

    int main()
    {
        printf(”pid is %d/n”,getpid() );
        return 0;
    }

    进入main函数,这就是一个进程,进程pid会打印出来,然后运行到return,该函数就退出,由于该函数是该进程的唯一的一次执行,所以return后,该进程也会退出。

        进程的组成:程序 + 数据集合 + PCB…
            程序用于描述进程要完成的功能,是控制进程执行的指令集;
            数据集合是程序在执行时所需要的数据和工作区;
            程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。

        Linux下进程的分类:交互进程 + 批处理进程 + 守护进程
            交互进程:由shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
            批处理进程:这种进程和终端没有联系,它是被提交到一个队列中的进程序列。
            守护进程:又称监控进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。

        进程的基本特征:动态性 + 并发性 + 独立性 + 结构性
            动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
            并发性:任何进程都可以同其他进程一起并发执行;
            独立性:进程是系统进行资源分配和调度的一个独立单位;
            结构性:进程由程序、数据和进程控制块三部分组成。

        进程的状态:创建 + 就绪 + 运行 + 阻塞(等待) + 退出
            创建:进程正在创建,还不能运行。操作系统在创建进程时要进行的工作包括分配和建立进程控制块表项、建立资源表格并分配资源、加载程序并建立地址空间;
            就绪:进程已经具备执行的一切条件,正在等待分配CPU的处理时间片,或者时间片已用完,此线程被强制暂停,等待下一个属于它的时间片到来;
            运行:此进程正在执行,正在占用CPU时间片;
            阻塞:也叫等待状态,等待某一事件(如IO或另一个线程)执行完;等待态又分为可中断等待和不可中断等待两种。可中断的等待进程可被信号中断,而不可中断的等待进程不能被信号中断;
            退出:进程已结束,所以也称结束状态,释放操作系统分配的资源。

        进程在运行过程有三种状态:就绪、运行、阻塞,创建和退出状态描述的是进程的创建过程和退出过程。


    2. 线程

    早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。
    后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程序的要求了。于是就发明了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。

    定义:通常线程指的是共享相同地址空间的多个任务
    通俗:带有时间片的函数

        线程共享的资源
            可执行指令(代码)
            静态数据
            进程中打开的文件描述符
            当前的工作目录
            用户ID
            用户组ID

        线程独占的资源
            线程ID
            PC(程序计数器)和相关寄存器
            堆栈
            错误号(errno)
            优先级
            执行状态和属性

        线程与进程关系示意图
            共享进程的地址空间,全局变量(数据和堆)。各个线程共享进程的堆区,而线程各自维持自己的栈
            在操作共享区域的时候才有可能出现同步需要,操作栈不需要同步
            一个程序至少有一个进程,一个进程至少有一个线程

        线程的堆栈问题
            线程就是个无产阶级,但无产阶级干活,总得有自己的劳动工具吧,这个劳动工具就是栈,线程有自己的栈,这个栈仍然是使用进程的地址空间,只是这块空间被线程标记为了栈。
            每个线程都会有自己名义上私有的堆栈,之所以说是名义上的,是由于这些线程属于同一个进程,其他线程只要获取了你的私有堆栈上某些数据的指针,其他线程便可以自由访问你名义上的私有空间的数据变量,不过必须做好同步保护。而且一般不这样做,因为容易造成堆内内存管理混乱破坏线程栈空间等问题。

        线程与进程的区别
            地址空间:进程有自己独立的地址空间,线程共享进程的地址空间
            资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
            并发性:均可并发执行。但线程的划分尺度小于进程,使得多线程程序的并发性高
            独立性:进程之间相互独立,线程不能独立执行。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,必须依存在应用程序中,由应用程序提供多个线程执行控制。
            调度和切换:线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位。线程上下文切换比进程上下文切换要快得多

        线程和进程的优势比较

        线程的状态:创建 + 就绪 + 运行 + 阻塞(等待) + 退出
            创建:一个新的线程被创建,等待该线程被调用执行;
            就绪:时间片已用完,此线程被强制暂停,等待下一个属于他的时间片到来;
            运行:此线程正在执行,正在占用CPU时间片;
            阻塞:也叫等待状态,等待某一事件(如IO或另一个线程)执行完;
            退出:一个线程完成任务或者其他终止条件发生,该线程终止进入退出状态,退出状态释放该线程所分配的资源。

        早期的进程相当于现在的只有单个线程的进程,现在的多线程也有五种状态,现在的多线程的生命周期与早期进程的生命周期类似。

        虚拟地址、逻辑地址、线性地址、物理地址的区别?
        解析: 分段机制把一个逻辑地址转换为线性地址;接着,分页机制把一个线性地址转换为物理地址。
        逻辑地址(启动分段) -> 线性地址(启动分页) -> 物理地址
            虚拟地址:虚拟内存映射出来的地址
            逻辑地址:程序的段加偏移量形成的,C/C++程序中取地址求出来的地址就是逻辑地址
            线性地址:是逻辑地址到物理地址的中间层,只有启动分页机制的时候才有线性地址,如果没有分页机制,那么线性地址就是物理地址
            物理地址:是内存中实实在在存在的硬件地址

    补充: Linux进程间通信 - IPC
    由于多进程要并发协调工作,进程间的同步,通信是在所难免的。
    linux下进程间通信的几种主要手段简介:

    (1) 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信
    (2) 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身
    (3) 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    (4) 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
    (5) 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
    (6) 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

    多线程间要通信,应该怎么做?多数的多线程都是在同一个进程下的,它们共享该进程的全局变量,我们可以通过全局变量来实现线程间通信。如果是不同的进程下的2个线程间通信,直接参考进程间通信。

     

    Acknowledgements:
    http://blog.csdn.net/rl529014/article/details/51280018
    http://blog.csdn.net/hairetz/article/details/4281931/
    http://blog.csdn.net/daoshuti/article/details/55045567
    http://blog.csdn.net/luoweifu/article/details/46595285
    http://www.cnblogs.com/LUO77/p/5771237.html

    2017.04.10
    本人博客会根据个人知识升级情况进行补充修改
    ---------------------
    作者:shuaixio
    来源:CSDN
    原文:https://blog.csdn.net/baidu_35692628/article/details/69218808
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可以同属于一个进程的其他线程共享进程所拥有的的全部资源。二、关系和区别一个线程可以创建撤销另一个线程;同一个进程中的多个...
  • 线程编程
  • c语言线程 学习笔记

    2021-06-11 18:55:08
    一、线程和进程区别 进程是资源分配最小单位,线程是CPU调度最小单位 线程在进程下行进(单纯车厢无法运行) 一个进程可以包含多个线程(一辆火车可以有多个车厢) 不同进程间数据很难共享(一辆火车...
  • 认识C语言的线程

    2020-06-14 16:21:42
    文章目录线程背景知识串行计算与并行计算并行计算的内存架构线程模型进程和线程的区别为什么要多线程POSIX线程(pthread)库线程基础线程创建终止参考文献 线程背景知识 串行计算与并行计算 传统上,软件是为...
  • mallocnew区别 1,malloc与free是C++/C语言的标准库函数,new/delete是C++运算符。它们都可用于申请动态内存释放内存。 2,对于非内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象在创建...
  • linux下的C语言开发(多线程编程)

    万次阅读 多人点赞 2012-02-06 19:45:46
     多线程和进程还是有很多区别的。其中之一就是,多进程是linux内核本身所支持,而多线程则需要相应动态库进行支持。对于进程而言,数据之间都是相互隔离,而多线程则不同,不同线程除了堆栈空间之外所有...
  • C语言】多线程编程

    2021-03-02 10:59:24
    线程的优点: ①与进程相比,成本低。...据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。 ②通信机制方便,适合大量数据传送
  • 进程和线程的区别 进程是资源分配的最小单位,线程是程序执行的最小单位。 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段数据段,这种操作非常昂贵。而...
  • 从多进程和线程编程的区别上看,多线程有许多的同步、互斥的方法,较擅长于异步协作;而多进程同步、互斥的方法相对比较麻烦,则更多地考虑上下文独立执行; 从Nginx使用线程池/进程池处理大并发的思路去分析,...
  • 线程和进程还是有很多区别的。其中之一就是,多进程是linux内核本身所支持,而多线程则需要相应动态库进行支持。对于进程而言,数据之间都是相互隔离,而多线程则不同,不同线程除了堆栈空间之外所有...
  • 线程的创建运行

    2019-09-25 12:37:35
    线程是一个程序内部的顺序控制流线程和进程的区别:进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。对一个应用程序可以同时启动多个进程。例如每次执行JDK的java.exe程序,就启动了一个独立的Java...
  • 理解进程线程的区别及特性,进一步理解进程是资源分配单位,线程是独立调度单位。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu操作系统,gcc编译器。 三、实验内容步骤 进程异步...
  • 线程和进程的区别: 进程是系统分配资源的最小单位,线程是系统调度的最小单位。 一个进程内的线程之间是可以共享资源的。 每个进程至少有一个线程存在,即主线程。 注: 每个进程至少有一个线程存在,即主线程...
  • 理解进程线程的区别及特性,进一步理解进程是资源分配单位,线程是独立调度单位。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu操作系统,gcc编译器。 三、实验内容步骤 1、进程...
  • *程序与进程的区别 进程是动态的(代码,数据,PCB控制卡组成,有一定的生命周期),程序是静态的(指令的集合)。一个程序可以对应多个进程,但一个进程只能对应一个程序。比如C语言编译程序,会对应...
  • 进程的区别: (1)地址空间:线程是进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源拥有:进程是资源分配拥有的单位,同一个进程内的线程共享进程的资源 (3)...
  • c语言练习题

    2016-11-30 23:07:07
    1.进程和线程的区别 进程是资源分配的最小单元,具有一定独立功能的程序的一次活动。 线程进程的一个实体,是CPU调度分派的基本单位,它是比进程更小的能独立运行的基本单位。 1)简而言之,一个程序至少有一...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 141
精华内容 56
关键字:

c语言线程和进程的区别

c语言 订阅