C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用

简介: C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用

导航


1.了解并行与并发的概念

2.了解进程和线程

3.浅显的进行传参,调用


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


多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。


基于进程和基于线程:


基于进程的多任务处理是程序的并发执行。

基于线程的多任务处理是同一程序的片段的并发执行。


头文件#include < thread>


1.了解并行与并发的概念:


并行:两个或多个事件在同一时刻发生(同时发生)

并发:两个或多个事件在同一时间段发生



2.了解进程和线程:


进程:正在运行的程序,比如你打开了qq和微信就是两个进程

线程:进程内部的执行单元,比如谷歌浏览器打开了多个页面

多线程:多个线程并发执行




1个进程可以包含多个线程


创建线程,获取线程的id号:


#include <iostream>
#include <thread>
using namespace std;
void func()
{
  //this_thread::get_id  获取线程的id
  cout<<"this is my thread,thread is"<<this_thread::get_id<<endl;
}
int main()
{
  thread th = thread(func);
  th.join();    //用来等待被创建线程的结束,并回收它的资源
  cout<<"this is main thread,this thread is"<<this_thread::get_id<<endl;
  system("pause");
  return 0;
}



也可以进行传参:


#include <iostream>
#include <thread>
#include <string>
using namespace std;
void func(string s)
{
  //this_thread::get_id  获取线程的id
  cout<<"this is my thread,thread is "<<s<<endl;
}
int main()
{
  thread th = thread(func,"c++");   //将传入的参数放入其中
  th.join();    //用来等待被创建线程的结束,并回收它的资源
  cout<<"this is main thread"<<endl;
  system("pause");
  return 0;
}



如果传的是引用的话:


#include <iostream>
#include <thread>
#include <string>
using namespace std;
void func(string& s)
{
  cout<<(&s)<<endl;  //打印下地址
  cout<<"this is my thread,thread is "<<s<<endl;
}
int main()
{
  string ss = "c++";
  thread th = thread(func,std::ref(ss));  //后面传参数也要规范
  th.join();    //用来等待被创建线程的结束,并回收它的资源
  cout<<"this is main thread"<<endl;
  cout<<(&ss)<<endl;
  system("pause");
  return 0;
}



运行:



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


可以传多个参数:


#include <iostream>
#include <thread>
using namespace std;
void func(int a,int b)
{
  cout<<a+b<<endl;
}
int main()
{
  thread th = thread(func,1,2);  //后面可以传多个参数
  th.join();    //用来等待被创建线程的结束,并回收它的资源
  system("pause");
  return 0;
}


运行结果:3


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


同一个时间段运行,或者一个线程运行完之后再运行下一个


#include <iostream>
#include <thread>
using namespace std;
class theod
{
public:
  void operator()(int limit) //运算符重载,仿函数
  {
  for(int i=0;i<limit;i++)
  {
    cout<<i<<endl;
  }
  }
};
int main()
{
  thread th = thread(theod(),88);  //调用类内仿函数,参数写在旁边
  //th.join();   //如果放在上面时会等待线程结束后再进行运行下面for循环
  for(int i=0;i<88;i++)
  {
  cout<<"i am a:"<<endl;
  }
  th.join();    //join()写在下面时,main函数中的线程与调用函数那个线程会同个时间段进行运行,而不是依次
  system("pause");
  return 0;
}



不懂的


#include <iostream>
#include <thread>
#include <string>
using namespace std;
int main()
{
  string z = "test";
  thread f = thread([&z](int a,int b){
  cout<<z<<endl;
  cout<<a+b<<endl;
  },2,3);
  f.join();
  system("pause");
  return 0;
}
相关文章
|
24天前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
3天前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
12 1
|
23天前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
49 6
|
24天前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
51 5
|
22天前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
24天前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
43 4
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
60 1
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
32 3
|
2月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
25 2
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
41 2