![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程并发
mq白
菜鸡选手
展开
-
非同步阻塞,同步阻塞,异步阻塞,异步非阻塞 都是什么?
"是发起了一个调用后, 没有得到结果之前不返回, 那它毫无疑问就是被**“阻塞”**了(即调用进程处于 “waiting” 状态)。异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果(结果会在不久的将来获得)"调用发出了以后就直接返回了, 毫无疑问, 这个进程没有被**“阻塞”**。所谓同步,就是在发出一个调用时,在没有得到结果之前, 该调用就不返回。异步与否,取决于你的函数调用返回之后 OS 有没有在后台给你做事情。阻塞与否,取决于在非就绪状态时调用是否返回。原创 2022-10-29 18:54:46 · 276 阅读 · 0 评论 -
C++线程安全栈与队列
C++线程安全栈与队列原创 2022-07-11 14:07:07 · 630 阅读 · 3 评论 -
C++11 std::recursive_mutex
std::mutex 独占式互斥量std::recursive_mutex:允许在同一个线程中同一个互斥量多次被 lock() ,(但是递归加锁的次数是有限制的,太多可能会报异常),效率要比mutex低。如果你真的用了 recursive_mutex 要考虑代码是否有优化空间,如果能调用一次 lock()就不要调用多次。调用了lock()就得调用对应的unlock()程序才能正常结束#include<iostream>#include<thread>#inc.原创 2022-05-03 19:48:28 · 1247 阅读 · 0 评论 -
C++异步std::future与std::async创建后台任务并返回值
#include<iostream>#include<thread>#include<mutex>#include<list>#include<map>#include<future>int mythread() { //线程入口函数 std::cout << "mythread() start" << "threadid=" << std::this_thread::get_id(.原创 2022-05-02 13:14:43 · 1044 阅读 · 0 评论 -
C++ std::wait与std::condition_variable,notify_one()的使用
wait()用来等一个东西如果第二个参数,lambda返回值是true,那wait()直接返回;如果第二个参数lambda表达式返回值是false,那么wait()将解锁互斥量,并堵塞到本行那么堵塞到什么时候呢?堵塞到其他线程调用notify_one()成员函数为止如果wait()没有第二个参数:那么跟第二个参数lambda表达式返回值为false效果一样wait()将解锁互斥量,并堵塞到本行,堵塞到其他某个线程调用notify_one()成员函数为止#include <iostr.原创 2022-05-01 15:37:19 · 2003 阅读 · 0 评论 -
C++并行多线程归并排序
template<typename Iterator>void F(Iterator start, Iterator end) { std::sort(start, end);}template <typename Iterator>void merge(Iterator start, int length, int size){ for (int i = 1; i < size; i++) std::inplace_merge(start, start +.原创 2022-04-30 19:36:45 · 1796 阅读 · 1 评论 -
C++并发编程std::unique_lock第二个参数与成员函数
我们不再讲解,放代码和注释,自己理解即可#include<iostream>#include<thread>#include<mutex>std::mutex myMutex1;void G(int&i) { std::cout << i++ << std::endl; }//lock_guard可以带第二个参数:/*.1 std::adopt_lock: 表示这个互斥量已经被lock(),即不需要在构..原创 2022-04-29 13:00:40 · 715 阅读 · 0 评论 -
C++多线程互斥上锁
我们今天介绍一个简单的,用互斥上锁那么为什么要这么做呢?#include<iostream>#include<thread>void g(int& i) { std::cout << i++ << std::endl;}int main() { int n = 1; std::vector<std::thread>a; for (int i = 0; i < 10; i++) { a.emplace_.原创 2022-04-28 14:09:05 · 336 阅读 · 0 评论 -
C++并行多线程求和
源自于C++并发编程的代码,自己的理解和说明#include<iostream>#include<thread>#include<numeric>//提供std::accumulate#include<vector>#include<iterator>//提供std::distancetemplate<typename Iterator,typename T>struct accumulate_block{ .原创 2022-04-26 22:12:31 · 1581 阅读 · 0 评论 -
C++多线程问题
#include<iostream>#include<thread>#include<Windows.h>void do_something(unsigned) { std::cout << 1 << ' '; }struct func { int& i; func(int& i_) :i(i_) {} void operator()() { for (unsigned j = 0; j < 10; ++.原创 2022-04-27 21:32:21 · 458 阅读 · 0 评论 -
C++多线程helloWord
#include<iostream>#include<thread>void hello() { std::cout << "Hello Concurrent Word\n";}int main() { std::thread t(hello); t.join();}这完全就是大材小用了,但这也正是我们开始学习C++并发编程的第一步,如果想要系统的学习C++的多线程并发。强烈推荐《C++并发编程第二版》,其所使用标准C++111,C++14,C.原创 2022-04-25 12:45:19 · 718 阅读 · 1 评论