![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 50
zhaoyqcsdn
a coder with c++/Python/shell;
自动驾驶从业者
展开
-
C++中, barrier的使用
在 C++20 中引入了类(C++17中是),它是一种同步原语,用于在线程间同步和协调。可以在一组线程中设置一个栅栏(barrier),使得这些线程在执行到栅栏之前必须等待所有其他线程都到达栅栏,然后一起继续执行。这种行为对于一些并行算法或任务分解中的同步非常有用。以下是在这个示例中,我们首先创建了一个对象bar,并指定了需要等待的线程数量。然后,我们创建了多个线程,并将bar的地址作为参数传递给每个线程的线程函数。在线程函数中,每个线程都会执行一些任务,并在执行完任务后调用函数等待其他线程到达栅栏。原创 2024-01-28 21:17:24 · 676 阅读 · 0 评论 -
C++中,latch的使用
特别适用于那些需要等待多个事务完成后才能继续执行的场景,比如并行算法的不同部分需要在继续之前同步完成状态,或者在启动时,程序需要等待多个资源加载完成后才能继续。),它提供了一个同步原语,使得一组线程可以等待直到某个事件被一定数量的线程观察到后才能继续执行。这是通过一个计数器来实现的,该计数器在。在这个例子中,主线程创建并启动了5个工作线程,每个工作线程在完成其任务后都会通过。的计数减至0,这时它继续执行。是单次使用的,一旦计数器达到0,就不能再重置计数器的值。会将计数器减1,直到计数器为0,此时所有调用。原创 2024-01-28 20:57:18 · 496 阅读 · 0 评论 -
C++中,函数签名是什么意思?
C++编译器通常会对函数名称进行修饰(或称之为名称改编或名称混淆),以包含更多有关函数的信息,如函数参数类型等,这是因为C++支持函数重载与多态。在C++中,函数签名是用来唯一标识函数的一组属性。函数签名允许编译器在函数重载的情况下正确识别和调用相应的函数。在函数重载时,编译器使用函数签名来判断哪一个函数被调用;如果两个函数除了返回类型外其他都相同,编译器会报错,因为它不能仅凭返回类型来区分这两个函数。以上就是关于C++中函数签名的概念以及其在函数重载和区分中的作用。当函数是类的成员函数时,原创 2024-01-28 18:19:19 · 550 阅读 · 0 评论 -
Linux进程间通信方法和代码示例
Linux进程间通信(IPC, Inter-Process Communication)包括了多种不同的技术,例如管道(pipe)、信号(signal)、共享内存(shared memory)、消息队列(message queues)、信号量(semaphores)以及套接字(sockets)等。管道是最基本的IPC机制之一,这里指匿名管道,允许一个进程和另一个进程之间的单向数据流。套接字允许在同一台计算机上的进程或不同计算机上的进程之间进行通信。共享内存允许两个或两个以上的进程共享一个给定的存储区。原创 2024-01-28 17:54:23 · 392 阅读 · 0 评论 -
std::shared_mutex的概念及其使用示例
是C++17引入的一种同步原语,用于提升在多线程环境下对共享资源的访问效率。与传统的互斥锁(如std::mutex)不同,允许多个线程以只读模式共享对资源的访问,但写入操作必须独占资源,防止同时有其他线程对共享资源进行读取或写入。这允许了更高的并行性,特别适用于读操作远多于写操作的场景。原创 2024-01-28 09:46:51 · 570 阅读 · 0 评论 -
为什么在使用类成员函数指针时,需要 &Myclass::myfunc ,而不是直接 Myclass::myfunc
成员函数指针类型可以用来声明变量,指向相应的成员函数,并且可以通过变量来调用相应的成员函数。需要注意的是,使用成员函数指针时,需要提供一个对象来调用相应的成员函数。成员函数指针类型的语法比较复杂,它包含了类的类型信息,以及函数的参数列表和返回类型等信息。我们知道一个函数的函数名就是这个函数的地址,那么我们使用类成员函数的地址时,为什么还要在前面加上取地址符号。传递成员函数时,需要使用对象的引用或指针,并且在成员函数前面加上 & 符号以获取成员函数的地址。的类,拥有一个成员函数。是成员函数的返回类型,原创 2024-01-27 22:40:28 · 355 阅读 · 0 评论 -
通过手撕std::ref来了解其工作原理
函数的原理基本相同:它们都是接受一个引用并返回一个包装了该引用的对象。通过包装引用,我们可以将一个对象传递给函数对象或函数时,使函数对象或函数能够修改对象的值,而不是修改其副本。,用于保存传入的引用。它有一个构造函数,接受一个引用并保存它。它还重载了解引用运算符和成员访问运算符,使得。的原理可以通过一个简单的模板类来实现。对象,它接受一个引用并返回一个包装了该引用的。对象可以像引用一样被使用。类模板包含一个成员指针。假设有变量int a;, 而不是 int&原创 2024-01-27 22:17:05 · 391 阅读 · 0 评论 -
通过手撕std::bind来了解其工作原理
是 C++11 中的一个函数模板,用于创建一个可调用对象(函数对象或者函数指针)的绑定副本,其中一部分参数被固定为指定值,从而生成一个新的可调用对象。绑定副本可以作为一个新的可调用对象,可以直接调用,也可以传递给其他接受可调用对象的函数,从而实现部分参数固定的函数调用。时,会生成一个新的可调用对象,其中一部分参数被绑定为指定值,剩余的参数保留为占位符(placeholder)。在调用绑定副本时,传递给绑定副本的参数会替换掉占位符,从而形成最终的参数列表,并调用原始函数或函数对象。生成了一个新的可调用对象。原创 2024-01-27 21:45:06 · 629 阅读 · 0 评论 -
taskflow 源码阅读笔记-1
本文是commitid: b91df2c365c20fa4cb43951192f6939fbe876abf 版本的源码学习记录,其他版本可能会有不同简介可以参考代码仓库的README。原创 2024-01-26 22:42:40 · 1633 阅读 · 0 评论 -
C++实现并行和异步任务,DAG流水线的开源库-Taskflow
它提供了一个灵活而高效的框架,使得开发者能够方便地定义和执行任务流程,利用多核处理器的并行性能。Taskflow 支持任务之间的有向无环图(DAG)结构,通过图中的节点和边来表示任务和它们之间的依赖关系。这使得任务之间的关系更加清晰,有助于提高代码的可读性和维护性。以上代码创建了一个包含两个简单任务的任务流程图,并定义了任务之间的依赖关系。Taskflow 提供了一个强大而灵活的工具,适用于需要高效处理并行和异步任务的 C++ 项目。适用于有复杂任务依赖关系的场景,通过任务流程图清晰地表示任务之间的关系。原创 2024-01-26 22:23:35 · 854 阅读 · 0 评论 -
C++原子变量及内存模型
C++中的原子变量通过原子操作提供了一种管理并发访问的机制,它是在C++11及以后的标准中引入的。这些操作确保了当多个线程尝试同时更新同一个变量时,该变量的行为是可预测和一致的。原创 2024-01-20 16:29:50 · 426 阅读 · 0 评论 -
c++ std::move()到底干了什么
实际上,std::move() 并不执行任何实际的操作,它只是一个简单的类型转换工具,用于告诉编译器将一个对象视为右值,以便在移动语义的上下文中使用。通过使用 std::move(),你可以在某些情况下提高程序的性能,例如在移动语义可用的情况下,显式地调用移动构造函数或移动赋值运算符。std::move() 是 C++ 中一个很有用的函数,它用于将传递给它的对象转换为右值引用。std::move()的实现非常简单,它实际上只是将传递给它的对象强制转换为对应的右值引用。原创 2024-01-09 21:03:35 · 1114 阅读 · 2 评论