- 博客(10)
- 收藏
- 关注
原创 C++并发与实战(1):实现一个高并发trie
课程官网:https://15445.courses.cs.cmu.edu/fall2023/github主页:https://github.com/cmu-db/bustub本人的环境配置使用的是wsl2+clangd(编译)+cmake(构建)+vscode(IDE)+lldb(调试)(wsl1不支持lldb的部分功能,最好升级到2(虽然1的更轻量化),要提供虚拟化,模拟器什么的最好卸了(虽然我没卸,因为mrfz(doge)))还有格式插件clangformat,保持一个良好的码风是很重要的。
2025-03-19 21:57:01
1013
原创 C++并发学习笔记(5):异步与future
命令模式是一种行为设计模式,它将请求封装成一个对象,从而使你可以用不同的请求、队列或者日志来参数化其他对象。它可以将命令的请求者与执行者解耦,使得请求的发送者和接收者之间不需要直接依赖。是 C++11 引入的一种工具,用于将一个可调用对象(函数、函数对象、lambda 等)包装成一个异步任务,并通过。当它被调用时,它就会调用其绑定的函数或者可调用对象。总是启动一个新的线程,你不能控制它是否会在新线程中执行(除非使用线程池或手动管理线程)。用法非常简单,它会自动管理线程的创建和销毁。,它会创建一个新线程;
2025-03-13 14:05:56
1059
原创 2024 CCPC邀请赛(山东)部分题解 (The 2024 CCPC Shandong Invitational Contest)
如果标记区间剩下恰好一个红球,则计入答案(这部分看代码会更方便理解)我们需要查询每个区间最晚的和第二晚变色的球,运用线段树即可做到。接下来进行到修改操作,注意到一次修改影响到最多。由于每个子区间传递次数不超过两次,而子区间总数。思考一个问题:如果询问改成离线,应该怎么做?的时候,我们需要传递信息给所有的标记区间,为子区间剩余红球数量,在变色修改时更新。本题为强制在线,需要另辟蹊径。观察到区间为一开始给定,我们把。这个区间下放到线段树上,把。的利润,我们对每一种。对于每个子区间,我们记。
2025-03-09 15:39:20
962
原创 现代C++学习:右值引用|移动语义|完美转发
在 C++ 中,值可以根据不同的标准进行分类。按照表达式求值结果的类别,通常分为以下五种值类别(Value Categories)
2025-03-04 15:56:45
1029
原创 Codeforces Round 997 (Div. 2) (A-E)
考虑分治,使用set递归找出所有极大的区间(有一些细节见代码,边界问题很容易错),依次删除,然后你会剩下一些空子,是经典的括号匹配问题(卡特兰数(使用递推求解)),所有方案数相乘即可。1 2 3 4 5 是可行的,不过需要特判一下n=6/7的情况。乍一看没什么思路,正难则反,考虑将所有区间减去不合法的区间。F1看起来是高精度好可怕,跑路了跑路了(doge)一开始想复杂了,以为是神秘计数poly题。,我偷懒用了map多一个log,也能过。今天看了一下好像并不需要高精度捏。,一个很经典的trick是把。
2025-03-01 22:41:52
1177
原创 C++并发学习笔记(4):锁
但是你会得到如下结果:reader在writer前先行执行,导致读入值为0。配合使用,因为它能够在等待时释放锁,并在唤醒后自动重新获取锁。的 RAII 工具,能自动加锁和解锁,减少忘记解锁的风险。支持同一线程多次加锁,但需要确保每次加锁都要有对应的解锁。:提供超时机制,允许线程在一定时间内尝试获取锁,由。提供共享锁和独占锁的能力,适用于读多写少的场景。在基础功能之上,C++ 中的其他锁类(如。支持定时等待的互斥锁,可以使用。:支持同一线程多次加锁,这是由。最常用的互斥锁,支持显式的。:支持读写锁功能,由。
2025-02-24 16:05:03
935
原创 C++并发学习笔记(2):线程启动与运行
在 C++ 中,线程的启动主要通过 类完成。 是 C++11 引入的线程库,用于创建和管理线程。(2)通过 Lambda 表达式启动线程使用匿名函数(Lambda 表达式)定义线程的任务。这种方式非常简洁,常用于小型任务。问题: 、 和 之间有什么区别?在 C++ 中,Lambda 表达式的捕获列表用于决定如何访问外部作用域的变量。、 和 是三种常见的捕获方式,它们在行为上有显著的差异。下面我们来一一解析它们的区别。对于静态成员函数,它与类的对象实例无关,因此你可以像普通函数一样直接
2025-02-15 16:31:49
1352
原创 C++ 并发学习笔记(1):基础概念
在没有锁的情况下,多个线程可以同时访问共享资源,这可能导致数据的不一致性。而锁通过控制线程的访问顺序,确保同一时刻只有一个线程可以操作共享资源。线程是进程中的基本执行单位,每个进程可以包含多个线程,这些线程共享进程的地址空间。并发是指程序中可以同时处理多个任务的能力,但这些任务不一定同时运行。当多个线程同时访问同一个共享资源并尝试修改其内容,且访问顺序不受控制时,会发生数据竞争,可能导致程序行为不确定。如果锁被占用,线程不会进入阻塞状态,而是持续尝试获取锁。允许多个线程同时读取资源,但写操作是排他性的。
2025-02-14 20:32:42
1016
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人