【GAMES101】线代基础应用

【GAMES101】线代基础应用

点积与叉积在图形学的简单应用 点积(Dot Product) 高中我们都学过点积的几何定义(这里需注意\hat a 表示方向和\vec{a}相同的单位向量 ):

协程库fiber类的核心实现

协程库fiber类的核心实现

作为"线程的线程",协程能够将线程的同步任务改造成异步执行,可以实现用户级的并发。最核心的原理就是前面介绍过的ucontext,它可以记录线程执行到某时的运行状态,并随时暂存或恢复。 那么,有了ucontext后,如何管理协程的状态信息呢?如何实现协程调度,以及其中最核心的操作resume()和yi

POSIX线程库(pthread)和线程分离状态

POSIX线程库(pthread)和线程分离状态

由于协程的优势需要借助多线程发挥,因此实现协程库之前先动手封装一个自己的轻量线程库 其实就是对POSIX各个接口的封装,让它和项目更统一一些,刚好也可以学习一下多线程编程 POSIX线程库基本接口 pthread_create 函数原型如下 int pthread_create(pthread_t

condition_variable与unique_lock

condition_variable与unique_lock

暂时做简单记录 C++中的条件变量condition_variable unique_lock最简单的用法 由于这里还没介绍unique_lock,这里先介绍一个最简单的用法: std::mutex mtx; std::condition_variable cv; int data = 0; vo

初见ucontext

初见ucontext

协程 什么是协程? 协程通俗一点可以看作一种轻量级线程。408中深入学习过进程与线程,它们都是操作系统级的并发/并行方式,而协程可以实现用户级的并发编程。 具体来说,协程在执行过程中可以实现用户级的yield(暂停)和resume(恢复):协程中,函数可以在执行过程中yield,然后切换至另一个函数

【BFS】熊熊采蜜

【BFS】熊熊采蜜

晴问链接:熊熊采蜜 题目描述 熊熊正在采蜜,他需要编写一个AI来帮助他高效地采集蜂蜜。在采蜜的过程中,熊熊会遇到三个蜂巢,每个蜂巢都有一定数量的蜂蜜。当熊熊发动采集时,他可以选择最多三个不同的蜂巢进行采集,这里选择的顺序不限制: 第一个被采集的蜂巢将失去 a 点蜂蜜。 第二个被采集的蜂巢(如果有)将

【最短路】dj堆优化的细节处理

【最短路】dj堆优化的细节处理

先不多说,记录一下对如下代码的理解: while(!pq.empty()) { int now = pq.top().first; pq.pop(); if(visited[now] == 1) { continue; } visited[now] = 1; for(pair<int

【二叉树/图】ACM模式下的树/图数据输入

【二叉树/图】ACM模式下的树/图数据输入

普通二叉树 首先是二叉树的结构,假如数据用以下方式给出: 第一行一个整数n(1≤n≤50),表示二叉树的结点个数; 接下来n行,每行一个结点,按顺序给出编号从0到n-1的结点的左子结点编号和右子结点编号,中间用空格隔开。如果不存在对应的子结点,那么用-1表示。 6 2 5 -1 -1 1 4 -1

【回溯】组合问题复盘

【回溯】组合问题复盘

基础版:77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例

【回溯去重】组合总和2

【回溯去重】组合总和2

题目:40. 组合总和 II 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target