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;
}
相关文章
|
14天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
1天前
|
安全 算法 Java
JavaSE&多线程&线程池
JavaSE&多线程&线程池
15 7
|
1天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程
|
1天前
|
存储 缓存 NoSQL
为什么Redis使用单线程 性能会优于多线程?
在计算机领域,性能一直都是一个关键的话题。无论是应用开发还是系统优化,我们都需要关注如何在有限的资源下,实现最大程度的性能提升。Redis,作为一款高性能的开源内存数据库,因其出色的单线程性能而备受瞩目。那么,为什么Redis使用单线程性能会优于多线程呢?
13 1
|
6天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
8天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
28 0
|
8天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
7 0
|
12天前
|
Java API 调度
安卓多线程和并发处理:提高应用效率
【4月更文挑战第13天】本文探讨了安卓应用中多线程和并发处理的优化方法,包括使用Thread、AsyncTask、Loader、IntentService、JobScheduler、WorkManager以及线程池。此外,还介绍了RxJava和Kotlin协程作为异步编程工具。理解并恰当运用这些技术能提升应用效率,避免UI卡顿,确保良好用户体验。随着安卓技术发展,更高级的异步处理工具将助力开发者构建高性能应用。
|
23天前
|
安全 Linux API
Android进程与线程
Android进程与线程
18 0

相关实验场景

更多