C++ Thread

来源:互联网 发布:mamp mysql 启动失败 编辑:程序博客网 时间:2024/05/19 04:28

本博客转自:https://originals-tz.github.io/

由于不同平台下所使用的API不同,因此分两篇介绍Windows和Linux下多线程的使用

0x00 介绍

一.进程

首先来看进程,它是一个正在运行的程序的实例,是一个程序在其自身的地址空间的一次执行活动。进程是资源申请、调度、和独立运行的基本单位。进程有两部分组成:

  • 1操作系统用来管理进程的内核对象,内核对象是系统用来存放关于进程的统计信息的地方,它是操作系统内部分配的一块内存块,该内存块是一种数据结构,其成员负责维护该对象的各种信息。

  • 2地址空间,它包含所有可执行模块、dll模块的代码和数据,也包含动态内存分配的空间。

二.线程

真正完成代码执行的是线程,而进程只是线程的容器,或者说是线程的执行环境。

每个进程至少拥有一个线程,来执行进程的地址空间的代码。当创建一个进程时,操作系统自动创建该进程的第一个线程,称为主线程,也就是执行main或WinMain函数的线程,也可以把main或WinMain函数看作是主线程的进入点函数,然后主线程可以创建其他线程。

线程由两部分组成:

  • 1线程的内核对象,操作系统用它来对线程实施管理,内核对象是系统用来存放关于线程的统计信息的地方

  • 2线程栈,它用于维护线程在执行代码时需要的所有函数参数和变量。

std::thread

#include <thread>#include <iostream>using namespace std;int i = 0;void add() {    i++;    for(int z = 0; z < 10; z++)        cout << "add:" << i << endl;}void minuss() {    i--;    for(int v = 0; v < 10; v++)        cout << "minus:" << i << endl;}int main() {    thread a(add);    thread b(minuss);    a.join();    b.join();    cout << "finish the job" << endl;    return 0;}

详情请看这里

原创粉丝点击