![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++11之并发与多线程编程
文章平均质量分 80
收录自己总结学习的关于C++11的多线程编程的博客
Fanfan21ya
累积所学所思,累积时间,冲冲冲~
展开
-
C/C++ linux 多线程编程报错 :undefined reference to `pthread_create‘
最近在做linux环境下编程时发现,在使用 C++ 11 中的线程类std::thread时,出现了下面的错误,这里做个笔记记录下。demo 代码:#include<iostream>#include<thread>using namespace std;void func(){ cout<<"llalal"<<endl;}int main(void){ thread mthd(func); mthd.join(..原创 2021-12-18 17:33:36 · 5065 阅读 · 0 评论 -
C++线程池(C语言版本)
本线程池代码是在Vscode下创建项目并结合CMakeList.txt使用GCC进行编译的。CMakeList.txt:cmake_minimum_required(VERSION 3.1.0)project(ProjectName)#ProjectName 需要你自己取项目名字!set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall ")set(CMAKE_BUILD_TYPE Debug)include_directories(${CMAKE原创 2022-01-01 21:51:55 · 1162 阅读 · 0 评论 -
Th13:补充知识、线程池浅谈、数量谈及课程总结
《1》补充知识 1.1》虚假唤醒问题notify_one或者notify_all唤醒wait()后,实际有些线程可能不满足唤醒的条件,就会造成虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。 问题解决:wait中一定要有第二个参数(谓词),并且这个谓词(我们一般都用Lambda表达式来写)中要正确判断所处理的公共数据是否存在!多多细心测试了再使用某段codes,才能让你自己写出安全稳定的多线程codes!1.2》atomic...原创 2021-12-31 21:32:50 · 727 阅读 · 0 评论 -
Th12:windows临界区、其他各种mutex互斥量
《1》windows临界区(稍微见识见识即可,因为不是linux下的,不是重点!)因为windows临界区和C++11中的mutex互斥量非常类似,因此这里做个介绍。demo_codes:#include<iostream>#include<mutex>#include<thread>#include<deque>#include<Windows.h>//若要在windows下自带的程序做一些多线程的编程...原创 2021-12-31 18:03:05 · 900 阅读 · 0 评论 -
Th11:std::atomic续谈、std::async深入谈
《1》原子操作std::atomic续谈std::atomic对于需要保护的共享数据所进行的原子操作并不支持所有运算符号,比如:+ 号std::atomic只支持++、--、+=、-=运算符,其他运算符不支持!demo_codes:#include<iostream>#include<thread>#include<atomic>#include<chrono>using namespace std...原创 2021-12-30 21:01:36 · 445 阅读 · 0 评论 -
Th10:future的其他成员函数、shared_future、atomic
《1》std::future的其他成员函数《2》std::shared_future《3》原子操作std::atomic 3.1》原子操作概念引出范例3.2》基本的std::atomic用法范例3.3》wjw老师的心得...原创 2021-12-30 10:53:56 · 429 阅读 · 0 评论 -
Th9:async、future、packaged_task、promise
《1》std::async、std::future创建后台任务并返回值《2》std::package_task《3》std::promise《4》小结原创 2021-12-26 22:48:57 · 534 阅读 · 0 评论 -
Th8:condition_variable、wait、notify_one、notify_all(重要)
《1》条件变量std::condition_variable、wait()、notify_one《2》对上述代码之深入思考《3》notify_all()原创 2021-12-24 16:27:13 · 948 阅读 · 0 评论 -
Th7:单例设计模式共享数据问题的分析和解决,call_once
《1》设计模式大概谈所谓“设计模式”,指的是代码的一些写法(这些写法与常规的写法不一样)。它会使得程序变得灵活,维护起来可能方便。但,用设计模式理念写出来的代码很晦涩,别人接管、阅读代码都会很痛苦,需要下很大功夫才能搞clear。设计模式最先是老外应付特别大的项目时,把项目的开发经验、模块划分经验,总结整理而成的。0几年设计模式在中国刚开始火时,程序员们总喜欢拿一个设计模式往项目代码上套,导致一个小小的项目总要加几个设计模式,这就本末倒置了。 但不可...原创 2021-12-23 20:55:43 · 300 阅读 · 0 评论 -
Th6:unique_lock(类模板)详解
《1》unique_lock取代lock_guard《2》unique_lock的第2个参数 2.1》std::adopt_lock2.2》std::try_to_lock2.3》std::defer_lock《3》unique_lock的成员函数 3.1》lock()3.2》unlock()3.3》try_lock()3.4》release()《4》u...原创 2021-12-23 15:25:31 · 572 阅读 · 0 评论 -
Th5:互斥量概念、用法、死锁演示以及解决详解(很重要)
保护共享数据,操作时,某个线程用代码把共享数据锁住、操作数据、解锁。那么其他想操作共享数据的线程就必须等待锁住的线程解锁才能对共享数据进行操作。《1》互斥量(mutex)的基本概念互斥量(mutex):互斥量是个类对象。我们可以理解为一把锁,多个线程都尝试用lock()成员函数来加锁这把锁头,但是只有一个线程会成功锁住(成功的标志是lock()函数成功返回)。如果某个线程卡在lock()这里,那么程序就会不断地尝试去锁住这把锁头(因为锁不上呀,所以就会一直卡在这儿...原创 2021-12-22 11:56:50 · 952 阅读 · 0 评论 -
Th4:创建多个线程、数据共享问题分析、案例代码
《1》创建和等待多个线程demo代码:(以下这个demo代码非常值得学习!!!)#include<iostream>#include<thread>#include<vector>using namespace std;void myprint(int num) {//线程入口函数 cout << "myprint线程开始执行,线程编号为:" << num << endl; //...do some work...原创 2021-12-20 20:57:47 · 284 阅读 · 0 评论 -
Th3:线程传参详解、detach()大坑以及成员函数做线程函数的问题
(1)传递临时对象作为线程参数1 (1.1)要避免的陷阱(解释1)(1.2)要避免的陷阱(解释2)(1.3)总结(2)临时对象作为线程参数2 (2.2)线程id概念 (2.3)临时对象构造时机捕捉(3)类对象、智能指针作为线程参数(4)用类的成员函数指针做线程函数(2021-12-18继续更新哈~未完待续)...原创 2021-12-17 23:04:17 · 569 阅读 · 0 评论 -
Th2:线程启动、结束,创建线程方法、join、detach
《1》范例演示线程运行的开始与结束 创建一个线程的procedure a)#include<thread> b)写子线程函数(启动子线程的这个函数)(只要执行完子线程函数后,那么该子线程就end了!) c)main中创建thread例子代码:#include<iostream>#include<thread>using namespace std;void myprint() { cout << "我的线程开...原创 2021-12-15 20:19:22 · 254 阅读 · 0 评论 -
Th1:并发基本概念及实现、进程、线程基本概念
《1》并发、进程、线程的基本概念和综述1.1》并发并发:指的是两个或者两个以上的独立活动同时发生。计算机中的并发:在单个系统中同时执行多个独立的任务。并发的主要目的是:提高性能。1.2》可执行程序可执行程序:为磁盘上的一个文件。windows下为后缀名是*.exe的文件;linux下,ls-la后显示的 rwxrwxrwx(这里的标记为x的即为可执行程序的文件)1.3》...原创 2021-12-15 14:20:55 · 509 阅读 · 0 评论