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;
}
相关文章
|
27天前
|
Java 开发者
解锁并发编程新姿势!深度揭秘AQS独占锁&ReentrantLock重入锁奥秘,Condition条件变量让你玩转线程协作,秒变并发大神!
【8月更文挑战第4天】AQS是Java并发编程的核心框架,为锁和同步器提供基础结构。ReentrantLock基于AQS实现可重入互斥锁,比`synchronized`更灵活,支持可中断锁获取及超时控制。通过维护计数器实现锁的重入性。Condition接口允许ReentrantLock创建多个条件变量,支持细粒度线程协作,超越了传统`wait`/`notify`机制,助力开发者构建高效可靠的并发应用。
59 0
|
16天前
|
算法 Java
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
该博客文章综合介绍了Java并发编程的基础知识,包括线程与进程的区别、并发与并行的概念、线程的生命周期状态、`sleep`与`wait`方法的差异、`Lock`接口及其实现类与`synchronized`关键字的对比,以及生产者和消费者问题的解决方案和使用`Condition`对象替代`synchronized`关键字的方法。
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
|
9天前
|
Java 开发者
【编程高手必备】Java多线程编程实战揭秘:解锁高效并发的秘密武器!
【8月更文挑战第22天】Java多线程编程是提升软件性能的关键技术,可通过继承`Thread`类或实现`Runnable`接口创建线程。为确保数据一致性,可采用`synchronized`关键字或`ReentrantLock`进行线程同步。此外,利用`wait()`和`notify()`方法实现线程间通信。预防死锁策略包括避免嵌套锁定、固定锁顺序及设置获取锁的超时。掌握这些技巧能有效增强程序的并发处理能力。
13 2
|
16天前
|
算法 Java
JDK版本特性问题之想控制 G1 垃圾回收器的并行工作线程数量,如何解决
JDK版本特性问题之想控制 G1 垃圾回收器的并行工作线程数量,如何解决
|
18天前
|
存储 缓存 安全
聊一聊高效并发之线程安全
该文章主要探讨了高效并发中的线程安全问题,包括线程安全的定义、线程安全的类别划分以及实现线程安全的一些方法。
|
27天前
|
数据采集 并行计算 程序员
Python中的并发编程:理解多线程与多进程
在Python编程中,理解并发编程是提升程序性能和效率的关键。本文将深入探讨Python中的多线程和多进程编程模型,比较它们的优劣势,并提供实际应用中的最佳实践与案例分析。
|
18天前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
25 0
|
18天前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
17天前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
9天前
|
存储 算法 编译器
c++--类(上)
c++--类(上)

热门文章

最新文章

相关实验场景

更多
下一篇
云函数