广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中标准线程库怎么使用
  • 919
分享到

C++中标准线程库怎么使用

2023-06-29 02:06:58 919人浏览 独家记忆
摘要

本文小编为大家详细介绍“c++中标准线程库怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中标准线程库怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.创建线程异步执行我们可以通过async

本文小编为大家详细介绍“c++中标准线程库怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中标准线程库怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1.创建线程异步执行

我们可以通过async函数直接异步创建一个线程,这种方法相对来说比较简单,线程执行的结果可以直接用future<T>来进行获取。

#include <iOStream>#include <future> //线程对应的函数bool thread_func(int x) {return true;}int main(){int inputNum = 65547;std::future<bool> future = std::async(thread_func, inputNum);bool ret = future.get();getchar();}

2.通过使用互斥防止线程冲突

线程间同步读取内容的话一般不会出现线程安全问题,但如果线程间同步写同一个内容的话就容易出现冲突。比如每个线程执行一次,就会给全局执行次数累加一次,如果多个线程同时执行操作,在写的时候没有加锁,这就有可能导致执行次数被重复累加的情况。

#include <iostream>#include <thread>#include <mutex>std::mutex mtx;  int count=0; void print_block(int n) {mtx.lock();   count++;//do somethingsmtx.unlock();}int main(){std::thread thread1(print_block, 50);std::thread thread2(print_block, 50); thread1.join();thread2.join();getchar();return 0;}

3.采用信号量控制线程的运行

条件变量(condition_variable)用来控制线程的运行,线程启动的时候如果条件变量等待,会阻塞线程的运行,直到条件变量发送对应的通知线程才能开始运行。通过采用条件变量我们可以控制线程的运行,避免线程空运行消耗计算资源。

#include <iostream>#include <thread>#include <mutex>#include <condition_variable> std::mutex mtx;std::condition_variable cv; void print_id(int id) {std::unique_lock<std::mutex> lck(mtx);cv.wait(lck);std::cout << "thread " << id << '\n';}void Go() {std::unique_lock<std::mutex> lck(mtx);cv.notify_all();}int main(){std::thread threads[10];for (int i = 0; i < 10; ++i)threads[i] = std::thread(print_id, i);   std::cout << "start thread run" << std::endl;go();for (auto& th : threads){th.join();}getchar();return 0;}

4.通过promise实现进程间通信

很多时候线程间执行是有先后顺序的,我们需要等待上一个线程执行结束拿到结果之后再执行当前线程,这时候就涉及到线程间的等待和数据传递这时候std::promise<T>就能排上用场了,通过使用该变量我们可以很轻松的实现线程间的等待和数据传递。

#include <iostream>#include <future>#include <chrono>void Thread_Fun1(std::promise<int> &p){std::this_thread::sleep_for(std::chrono::seconds(5));int iVal = 233;std::cout << "传入数据(int):" << iVal << std::endl;p.set_value(iVal);} void Thread_Fun2(std::future<int> &f){//阻塞函数,直到收到相关联的std::promise对象传入的数据auto iVal = f.get();std::cout << "收到数据(int):" << iVal << std::endl;} int main(){std::promise<int> pr1;std::future<int> fu1 = pr1.get_future(); std::thread t1(Thread_Fun1, std::ref(pr1));std::thread t2(Thread_Fun2, std::ref(fu1)); //阻塞至线程结束t1.join();t2.join();return 1;}

读到这里,这篇“C++中标准线程库怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++中标准线程库怎么使用

本文链接: https://www.lsjlt.com/news/322002.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中标准线程库怎么使用
    本文小编为大家详细介绍“C++中标准线程库怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中标准线程库怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.创建线程异步执行我们可以通过async...
    99+
    2023-06-29
  • C++中标准线程库的基本使用介绍
    目录1.创建线程异步执行2.通过使用互斥锁防止线程冲突3.采用信号量控制线程的运行4.通过promise实现进程间通信总结Qt的封装程度比较高的线程类用多了,发现C++标准库里面的线...
    99+
    2022-11-13
  • C++中STL标准库std::vector怎么用
    小编给大家分享一下C++中STL标准库std::vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 简介vector 是表示可以改变大小的数组的...
    99+
    2023-06-29
  • C++11标准库tuple模板怎么使用
    这篇文章主要讲解了“C++11标准库tuple模板怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11标准库tuple模板怎么使用”吧!什么是tuple作者英语一般,在写文章之前...
    99+
    2023-06-19
  • C语言标准库函数qsort怎么使用
    C语言标准库函数qsort可以用来对数组进行快速排序。qsort函数的原型如下:```cvoid qsort(void *base,...
    99+
    2023-08-25
    C语言 qsort
  • C语言标准库函数fread怎么使用
    C语言标准库函数fread用于从文件中读取数据。函数原型为:```csize_t fread(void *ptr, size_t s...
    99+
    2023-08-25
    C语言 fread
  • C++11标准库mem_fn类模板怎么使用
    本篇内容主要讲解“C++11标准库mem_fn类模板怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11标准库mem_fn类模板怎么使用”吧!定制算法算法是C++标准库中非常重要的部...
    99+
    2023-06-19
  • C++11标准库函数begin和end怎么使用
    这篇文章主要介绍“C++11标准库函数begin和end怎么使用”,在日常操作中,相信很多人在C++11标准库函数begin和end怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11标准库函数b...
    99+
    2023-06-19
  • C++标准模版库之vector容器怎么使用
    今天小编给大家分享一下C++标准模版库之vector容器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。vector容...
    99+
    2023-07-05
  • Python标准库calendar怎么使用
    这篇文章主要介绍“Python标准库calendar怎么使用”,在日常操作中,相信很多人在Python标准库calendar怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python标准库calend...
    99+
    2023-06-25
  • 怎么使用Python标准库pathlib
    本篇内容主要讲解“怎么使用Python标准库pathlib”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python标准库pathlib”吧!学习 Python 时,尤其是在进行文件操作...
    99+
    2023-06-25
  • C++11标准库bind函数应用教程
    目录bind 是什么?举个栗子1. bind 无参数的普通函数2. bind 1个参数的普通函数3. bind 多个参数的普通函数4. bind 多个参数的普通函数并打乱参数位置5....
    99+
    2022-11-12
  • C++STL标准库std::vector的使用详解
    目录1. 简介2. 使用示例3. 构造、析构、赋值3.1 std::vector::vector 构造函数3.2 std::vector::~vector 析构函数3.3 std::...
    99+
    2022-11-13
  • REST.NET标准库refit怎么用
    这篇文章主要介绍“REST.NET标准库refit怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“REST.NET标准库refit怎么用”文章能帮助大家解决问题。1.简介Refit是一个受到Sq...
    99+
    2023-06-29
  • Go语言标准库strconv怎么使用
    这篇文章主要介绍“Go语言标准库strconv怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言标准库strconv怎么使用”文章能帮助大家解决问题。import "strco...
    99+
    2023-07-06
  • Python标准库及第三方库怎么使用
    本篇内容介绍了“Python标准库及第三方库怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、time模块1.time模块简介tim...
    99+
    2023-07-06
  • python标准库模块之json库怎么使用
    今天小编给大家分享一下python标准库模块之json库怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言json,...
    99+
    2023-07-02
  • Python的json标准库怎么用
    本文小编为大家详细介绍“Python的json标准库怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python的json标准库怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、JSON基础概述1、J...
    99+
    2023-06-30
  • Go语言标准库之strconv怎么使用
    这篇“Go语言标准库之strconv怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言标准库之strconv怎么...
    99+
    2023-07-05
  • python标准库logging模块怎么用
    本文小编为大家详细介绍“python标准库logging模块怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python标准库logging模块怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题1:如...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作