随笔分类 -  C++多线程

多线程入门
摘要:1. packaged_task packaged_task类似于将一个函数任务打包,然后换到其他地方去执行。通常多线程编程就会使用的这种方式。比如简易的线程池中。 packaged_task中<>放的是函数参数类型,类似stdfunction中放的东西。 packaged_task的返回值是voi 阅读全文
posted @ 2021-08-01 15:59 cyssmile 阅读(970) 评论(2) 推荐(0)
摘要:要使用future和promise要先引入头文件 #include <future> 1 future 使用future时就是这个字面意思,这个类型或者变量的具体的内容,将来会给你。 所以具体使用的时候需要用get方法。 int FunctionOne(std::future<int>& f) { 阅读全文
posted @ 2021-08-01 10:27 cyssmile 阅读(255) 评论(0) 推荐(0)
摘要:使用条件变量的最经典的场景就是生产者和消费者 1.最普通的生产者和消费者代码 #include<iostream> #include<deque> #include<thread> #include<mutex> #include<functional> using namespace std; s 阅读全文
posted @ 2020-08-02 23:03 cyssmile 阅读(278) 评论(0) 推荐(0)
摘要:1.一般的lock()和unlock() 一般的我们会写出这样的代码 std::mutex mu; mu.lock(); //.... mu.unlock() 这种方式我们是希望//...中间执行,保证只有有个线程进入临界区,但是这里存在一个问题,就是如果线程在临界区发生错误或者return,导致m 阅读全文
posted @ 2020-08-02 21:45 cyssmile 阅读(1087) 评论(0) 推荐(0)
摘要:在多线程的代码中,有时候有些操作只需要执行一次,比如fstream中打开文件open() 首先是不使用once_flag解决这种问题的缺陷和改进 1.示例代码的问题 #include<iostream> #include<thread> #include<mutex> #include<string 阅读全文
posted @ 2020-08-02 16:49 cyssmile 阅读(427) 评论(0) 推荐(0)
摘要:c++多线程中死锁多出现在使用多个mutex,而mutex的顺序不一样。比如下面的代码为了保证输出的原子性,在两个输出的函数中使用了两个mutex 但是这两个mutex锁的顺序是不一样的,结果就造成了死锁。 #include<iostream> #include<thread> #include<m 阅读全文
posted @ 2020-08-02 15:48 cyssmile 阅读(1321) 评论(0) 推荐(0)
摘要:多线程中引用 使用引用一般是不安全的,简单的使用,可能就是纯粹的赋值。 1.std::ref() 引用的可以使用std::ref()来进行引用传递,但是不推荐。 #include<iostream> #include<thread> #include<string> class Factor { p 阅读全文
posted @ 2020-07-30 21:20 cyssmile 阅读(307) 评论(0) 推荐(0)
摘要:在C++11 中 多线程的创建 1. 引入头文件 #include <thread> 2. join()、detach()以及jionable() join()主要是指当创建子线程后,子线程执行,主线程要在某个地方等待子线程执行完毕。 detach() 创建子线程后,子线程与主线程分离称为守护线程, 阅读全文
posted @ 2020-04-13 23:30 cyssmile 阅读(155) 评论(0) 推荐(0)