
C++并发与多线程
文章平均质量分 80
Michael.Scofield
C++程序猿
展开
-
C/C++之读写JSON数据
前言 在进行配置文件读取或者进行RPC(Remote Produce Call),我们需要在两个进程间传递大量的数据,这时我们一般会选择json/xml/protobuf来序列化数据,加快数据的传输与解析速度。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。关于json数据格式的具体介绍,大家可以自己去搜索,今天主要介绍下C/C++如何原创 2023-02-05 17:19:31 · 10084 阅读 · 0 评论 -
C++:并发与多线程(十一)
Windows临界区、其他各种mutex互斥量一 windows临界区二 多次进入临界区试验三 自动析构技术四 recursive mutex递归的独占互斥量五 带超时的互斥量std: timed_mutex和std: recursive_timed_mutex1. timed_mutex的try_lock_for()接口一 windows临界区windows下的临界区类似于C+11的mutex,都是进入临界区,执行函数,离开临界区CRITICAL_SECTION my_winsec; //win原创 2021-07-02 12:48:45 · 171 阅读 · 0 评论 -
C++:并发与多线程(十)
std: atomic续谈、std: async深入谈一 原子操作 std:atomic续谈二 std: async深入谈2.1 std: async参数详述2.2 std: async和std: thread的区别2.3 std async不确定性问题的解决原创 2021-07-02 10:27:49 · 166 阅读 · 0 评论 -
C++:并发与线程(九)
future其他成员函数、share_future、atomic一 std::future的其他成员函数std::future_status二 std::shared_future三 原子操作 std::atomic3.1 原子操作概念引出范例3.2 基本的std::atomic用法范例一 std::future的其他成员函数std::future_status枚举类型,等待一定时间,查看线程是否执行完枚举值:time_out ready deferred#include <iostre原创 2021-06-27 21:58:58 · 289 阅读 · 7 评论 -
C++:并发与多进程(八)
async、 Future、 packaged task、 promise一 std: :async、std: future创建后台任务并返回值std::async 是个函数模板,用来启动一个异步任务,然后返回一个std::future对象,std::future是个类模板什么叫启动一个异步任务:自动创建一个线程并开始执行对应的线入口函数,它返回一个std::future对象 ,std::future对象里边就含有线程入口函数所返回的结果,可以通过future对象的成员函数get()得到返回值fu原创 2021-06-25 21:28:27 · 1080 阅读 · 2 评论 -
C++:并发与多线程(七)
condition_variable、wait、 notify_one、 notify_all一 条件变量 std: condition_variable, wait(),notify _one()1.condition_variable2.wait()3.notify _one()二 上述代码深入思考三 notify_all())condition_variable、wait、 notify_one、 notify_all一 条件变量 std: condition_variable, wait()原创 2021-06-25 18:29:41 · 327 阅读 · 2 评论 -
C++ 并发与多线程(六)
单例设计模式共享数据分析、解决、call_once一 设计模式大概谈二 单例设计模式该类只能创建一个对象#include <stdio.h>#include <iostream>using namespace std;class MyCAS{ private: MyCAS(){} static MyCAS* m_instance; public: static MyCAS* GetInstance() { if(m_i原创 2021-06-24 22:49:33 · 127 阅读 · 0 评论 -
C++ 并发与多线程(五)
unique_lock详解1.unique_lock取代lock_guard2.unique_lock的第二个参数2.1 adopt_lock2.2 try_to_lock2.3 std::defer_lock3.unique_lock的成员函数3.1 lock() 加锁3.2 unlock()3.3 try_lock3.4 release()4.unique_lock所有权的传递4.1 调用std::move转移所有权4.2 使用A的类成员函数返回unique_lock对象1.unique_lock取代原创 2021-05-03 20:53:27 · 362 阅读 · 0 评论 -
C++ 并发与多线程(四)
互斥量概念、用法、死锁演示及解决详解1.互斥量(mutex)的基本概念2.互斥量的用法2.1 lock()和unlock()2.2 std::lock_guard类模板3 死锁3.1 死锁演示3.2 死锁的解决方案3.3 std::lock()函数模板3.4 std:lock_guard的std::adopt_lock参数1.互斥量(mutex)的基本概念保护共享号数据,某个线程操作时需要把共享数据锁住,然后操作数据,最后解锁。其他想操作共享数据的线程必须等待解锁,锁定住,操作,解锁。互斥量:类对象原创 2021-05-03 17:02:21 · 133 阅读 · 0 评论 -
C++并发与多线程(三)
创建多个线程、数据共享问题、案例代码1.创建个等待多个线程2.数据共享问题分析2.1只读数据共享2.2 有读有写的数据3.共享数据的保护案例代码1.创建个等待多个线程// 并发与多线程2_4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream>#include <vector>#include <thread>using namespace std;void原创 2021-05-03 13:33:37 · 138 阅读 · 0 评论 -
C++ 并发与多线程(二)
线程传参详解,detach()大坑,成员函数做线程函数1.传递临时对象作为线程参数1.1 要避免的陷阱(解释1)1.2 要避免的陷阱21.3 总结1.若传递int这种简单类型参数,建议直接用值传递,不要用引用。2.如果传递类对象,避免隐式类型转换。要在创建线程这一行构造出临时对象来,然后在函数参数里用引用来接,否则系统还会构造一次。3. 建议不使用detach,只使用join,这样就不存在局部变量失效导致线程对内存的非法引用。1.传递临时对象作为线程参数1.1 要避免的陷阱(解释1)先分析参数i,分析原创 2021-05-03 12:39:28 · 182 阅读 · 0 评论 -
C++并发与多线程(一)
第一节 并发基本概念及实现, 进程 线程基本概念一 并发线程 进程的基本概念和综述1.1 并发:两个或者更多的任务(独立的活动)同时发生:一个程序同时执行多个独立任务。单核cpu,某一时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所谓的“任务切换”。假象(不是真正的并发))这种切换(上下文切换)是要有时间开销的。1.2 可执行程序例如windows下的exe文件1.3 进程一个可执行程序运行以后即创建了一个进程。运行起来的可执行文件叫做一个进程。1.4 线程每个进程都有一个主线原创 2021-04-27 19:39:01 · 482 阅读 · 0 评论