zoukankan      html  css  js  c++  java
  • C++语言-09-多任务

    概述

    • 概念
      • 计算机同时运行多个程序的能力,多任务处理的方法是:运行第一个程序的一段代码,保存工作环境;再运行第二个程序的一段代码,保存工作环境;……恢复第一个程序的工作环境,执行第一个程序的下一段代码……程序的局部性原理,是多任务处理最重要的基础。
    • 多任务处理的类型
      • 基于进程的多任务处理
        • 程序之间的并发执行,由操作系统完成调度任务
      • 基于线程的多任务处理
        • 程序内部的并发执行,用户(系统的用户)可以调度任务
    • 关于
      • 若你想了解更多关于多任务处理的知识,如:任务调度,同步异步等,请阅读《计算机操作系统》一书。

    多线程

    • 多线程编程
      • C++ 中的多线程编程是基于 POSIX(Portable Operating System Interface Of UNIX) Threads 或 Pthreads 提供的 API
      • 注意
        • 线程可以理解为轻量级的进程,一个进程中的资源被所有的子线程共享,线程之间是同等的
    • 线程操作
      • 创建线程

        int pthread_create(pthread_t * __restrict, const pthread_attr_t * __restrict,
        void *(*)(void *), void * __restrict);
        
        • 第一个参数:一个不透明的、唯一的标识符,用于表示例程返回的新线程
        • 第二个参数:一个不透明的属性对象,可以被用来设置线程属性。可以指定线程属性对象,也可以使用默认值 NULL
        • 第三个参数:C++ 例程,一旦线程被创建就会执行
        • 第四个参数:一个可能传递给第三个参数(C++ 例程)的参数。必须通过把引用作为指针强制转换为 void 类型进行传递。如果没有传递参数,则使用 NULL。可以接受任何类型的参数,因为类型是 void *
      • 终止线程

        • 隐式终止
          • 在 main 函数终止时,未显示终止的线程会自动终止
        • 显示终止
          • 使用 pthread_exit 函数终止

            void pthread_exit(void *)
            
      • 连接和分离线程

        • 连接(实现线程间同步的一种方式)

          int pthread_join(pthread_t , void **)
          
          • 创建线程时,需要明确指定线程是否可连接。可移动设备中,并不是所有创建的线程默认都是可连接的。为了明确指定创建一个线程的连接性和分离性,创建一个线程可分为以下四个步骤:
            • 声明一个pthread_attr_t数据类型的pthread属性变量
            • 使用pthread_init()初始化属性变量
            • 使用pthread_attr_setdetachstate()设置属性为分离状态
            • 当使用完成后,使用pthread_attr_destroy()释放属性用到的资源
          • pthread_join()将挂起调用线程的执行直到目标线程终止,除非目标线程已经终止了
        • 分离

          int pthread_detach(pthread_t)
          
          • 通常不建议调用 pthread_detach() 去分离一个线程,只需要在创建线程的时候,指定线程为可分离即可
  • 相关阅读:
    Java的代理proxy机制
    Java 编译器 javac 笔记:javac API、注解处理 API 与 Lombok 原理
    Java 运行时获取方法参数名
    python 之 list 和 dict 置空
    Python 模块(Module)调用
    Python 模块(Module)及包
    Mybatis中进行批量更新(updateBatch)
    可持久化线段树+主席树+动态主席树
    无向图的割点与割边
    [NOIP2016] 愤怒的小鸟 题解
  • 原文地址:https://www.cnblogs.com/theDesertIslandOutOfTheWorld/p/5241161.html
Copyright © 2011-2022 走看看