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;
}
相关文章
|
2天前
|
存储 安全 Java
C++线程浅谈
C++线程浅谈
9 1
|
2天前
|
存储 Linux API
C++新特性 线程局部存储
C++新特性 线程局部存储
5 0
|
3天前
|
存储 Unix 编译器
DP读书:《openEuler操作系统》(五)进程与线程
DP读书:《openEuler操作系统》(五)进程与线程
47 0
|
15天前
|
NoSQL Unix Linux
Linux下的系统编程——守护进程、线程(十二)
Linux下的系统编程——守护进程、线程(十二)
9 0
Linux下的系统编程——守护进程、线程(十二)
|
23天前
|
监控 算法 Java
【JavaEE】什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
【JavaEE】什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
|
23天前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
24 0
|
23天前
|
Java
Java中的进程与线程
Java中的进程与线程
22 0
|
23天前
|
安全 Java API
深入了解Java进程和线程
深入了解Java进程和线程
29 1
|
3天前
|
存储 数据安全/隐私保护 C++
基于C++的面向对象程序设计:类与对象的深入剖析
基于C++的面向对象程序设计:类与对象的深入剖析
19 1

热门文章

最新文章

相关产品

  • 云迁移中心
  • 相关实验场景

    更多