c++
文章平均质量分 65
bug根本写不完
屎山程序猿
展开
-
并发计算demo
跑了几次,能看到性能提升有4-5倍左右,min_per_thread可以根据实际的总量来调整。研究了下多线程并发计算的魅力,性能提升确实还是比较明显。原创 2024-01-19 14:29:22 · 399 阅读 · 0 评论 -
C++引用、移动语义与完美转发来看这篇就够了
std::move的作用是将一个左值/右值强制转化为右值引用,继而可以通过右值引用使用该值,所以称为移动语义。引用在c++中是一个特别的类型,因为它的值类型和变量类型不一样,引用这个变量是一个引用类型,但是它的值类型不是, 左值引用和右值引用变量的值类型都是左值, 而不是左值引用或者右值引用。报错原因是:不能绑定右值引用类型"int&&" 到左值类型"int"上,根本原因就是在万能引用传递后,a退化为了int类型。可以看出,std::move原型的实现最终就是将传入的所有类型转化为一个右值引用返回。原创 2023-07-31 17:45:48 · 64 阅读 · 1 评论 -
C++之STL std::function及std::bind总结
bind第一个参数传入一个函数、函数指针、lamda表达式、类的成员函数都是可以的,这里注意,如果是类的成员函数,则需要再类的作用域前加上&,第二个占位符需要注意,如果不是类的成员函数,那么直接要么是一个参数,例如10,或者std::placeholders::_1(由调用bind返回值时传入),如果是类的成员函数,第二个参数是实例化的类对象,第三个参数开始才是函数的输入参数。也可参考std::function对于类的成员函数的调用。注:调用类成员函数时,需要和std::bind一起使用;原创 2023-07-30 20:03:10 · 1651 阅读 · 1 评论 -
C++线程同步-条件变量(std::condition_variable)
线程同步是指线程间需要按照预定的先后次序顺序进行的行为。一个线程的执行需要依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,知道消息到达才被唤醒。原创 2023-07-20 20:00:00 · 191 阅读 · 0 评论 -
手写一个C++线程池-V1
首先介绍下线程池的作用,线程池属于一种多线程的使用模式,在运行时,生产者会将任务添加到中,而消费者会在创建线程后从此任务队列中获取任务来自动处理。这样避免了在短时间内创建和销毁线程的代价。线程池不仅能够内核的充分利用,还能防止过分调度。可用的线程数据取决于可用的并发处理器,处理内核,内存,网络sockets等数量。线程池中的所有线程都有默认的堆栈大小和默认优先级运行。如果一个线程处于空闲态,例如等待某个事件的发生,那么线程池将会插入另一个线程来使所有的处理器保持繁忙。原创 2023-07-24 22:14:09 · 64 阅读 · 0 评论 -
手写一个C++线程池V2
i++)});task();})t.join();原创 2023-07-29 18:38:03 · 69 阅读 · 0 评论