 Get off my thread: Techniques for moving k to background threads0 码力 | 90 页 | 6.97 MB | 6 月前3 Get off my thread: Techniques for moving k to background threads0 码力 | 90 页 | 6.97 MB | 6 月前3
 Hello 算法 1.0.0b4 C++版建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 8.3. Top‑K 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.4. 小结 . . . . 线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构 成,反映了复杂的网络关系。 逻辑结构通常分为“线性”和“非线性”两类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线 性结构则相反,呈非线性排列。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表。 ‧ 非线性数据结构:树、堆、图、哈希表。 Figure 3‑1. 线性与非线性数据结构 非线性数据结构可以进一步被划分为树形结构和网状结构。 进一步地,高度为 ℎ 的完美二叉树的节点数量为 ? = 2ℎ+1 − 1 ,易得复杂度为 ?(2ℎ) = ?(?) 。以上推 算表明,输入列表并建堆的时间复杂度为 ?(?) ,非常高效。 8.3. Top‑K 问题 � 给定一个长度为 ? 无序数组 nums ,请返回数组中前 ? 大的元素。 对于该问题,我们先介绍两种思路比较直接的解法,再介绍效率更高的堆解法。 8.3.1. 方法一:遍历选择 我们可以进行0 码力 | 343 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 C++版建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 8.3. Top‑K 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.4. 小结 . . . . 线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构 成,反映了复杂的网络关系。 逻辑结构通常分为“线性”和“非线性”两类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线 性结构则相反,呈非线性排列。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表。 ‧ 非线性数据结构:树、堆、图、哈希表。 Figure 3‑1. 线性与非线性数据结构 非线性数据结构可以进一步被划分为树形结构和网状结构。 进一步地,高度为 ℎ 的完美二叉树的节点数量为 ? = 2ℎ+1 − 1 ,易得复杂度为 ?(2ℎ) = ?(?) 。以上推 算表明,输入列表并建堆的时间复杂度为 ?(?) ,非常高效。 8.3. Top‑K 问题 � 给定一个长度为 ? 无序数组 nums ,请返回数组中前 ? 大的元素。 对于该问题,我们先介绍两种思路比较直接的解法,再介绍效率更高的堆解法。 8.3.1. 方法一:遍历选择 我们可以进行0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.0.0b5 C++版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 8.3 Top‑K 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.4 小结 . . . . 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照顺序依次排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构成, 反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可被分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上 进一步地,高度为 ℎ 的完美二叉树的节点数量为 ? = 2ℎ+1 − 1 ,易得复杂度为 ?(2ℎ) = ?(?) 。以上推 算表明,输入列表并建堆的时间复杂度为 ?(?) ,非常高效。 8.3 Top‑K 问题 � 给定一个长度为 ? 无序数组 nums ,请返回数组中前 ? 大的元素。 对于该问题,我们先介绍两种思路比较直接的解法,再介绍效率更高的堆解法。 8.3.1 方法一:遍历选择 我们可以进行图0 码力 | 377 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 C++版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 8.3 Top‑K 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.4 小结 . . . . 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照顺序依次排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构成, 反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可被分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上 进一步地,高度为 ℎ 的完美二叉树的节点数量为 ? = 2ℎ+1 − 1 ,易得复杂度为 ?(2ℎ) = ?(?) 。以上推 算表明,输入列表并建堆的时间复杂度为 ?(?) ,非常高效。 8.3 Top‑K 问题 � 给定一个长度为 ? 无序数组 nums ,请返回数组中前 ? 大的元素。 对于该问题,我们先介绍两种思路比较直接的解法,再介绍效率更高的堆解法。 8.3.1 方法一:遍历选择 我们可以进行图0 码力 | 377 页 | 30.69 MB | 1 年前3
 Hello 算法 1.1.0 C++ 版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.3 Top‑k 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 小结 . . . ngXta、hello‑ikun、khoaxuantu、FangYuan33、GN‑Yu、longsizhuo、 mgisr、Cathay‑Chen、guowei‑gong、xBLACKICEx、K3v123、IsChristina、JoseHung、qualifier1024、 pengchzn、Guanngxu、QiLOL、L‑Super、WSL0809、Slone123c、lhxsm、yuan0221、what‑is‑me、 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C++ 版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.3 Top‑k 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 小结 . . . ngXta、hello‑ikun、khoaxuantu、FangYuan33、GN‑Yu、longsizhuo、 mgisr、Cathay‑Chen、guowei‑gong、xBLACKICEx、K3v123、IsChristina、JoseHung、qualifier1024、 pengchzn、Guanngxu、QiLOL、L‑Super、WSL0809、Slone123c、lhxsm、yuan0221、what‑is‑me、 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 C++版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.3 Top‑k 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 小结 . . . yuan0221、lhxsm、Slone123c、WSL0809、longranger2、theNefelibatas、xiongsp、JeffersonHuang、 hongyun‑robot、K3v123、yuelinxin、a16su、gaofer、malone6、Wonderdch、xjr7670、DullSword、 Horbin‑Magician、NI‑SW、reeswell、XC 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 C++版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.3 Top‑k 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 小结 . . . yuan0221、lhxsm、Slone123c、WSL0809、longranger2、theNefelibatas、xiongsp、JeffersonHuang、 hongyun‑robot、K3v123、yuelinxin、a16su、gaofer、malone6、Wonderdch、xjr7670、DullSword、 Horbin‑Magician、NI‑SW、reeswell、XC 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.3 Top‑k 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 小结 . . . danielsss、curtishd、night‑cruise、S‑N‑O‑R‑L‑A‑X、msk397、gvenusleo、khoaxuantu、RiverTwilight、 rongyi、gyt95、zhuoqinyue、K3v123、Zuoxun、mingXta、hello‑ikun、FangYuan33、GN‑Yu、yuelinxin、 longsizhuo、Cathay‑Chen、guowei‑gong、xBLA 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C++ 版2 建堆操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.3 Top‑k 问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 小结 . . . danielsss、curtishd、night‑cruise、S‑N‑O‑R‑L‑A‑X、msk397、gvenusleo、khoaxuantu、RiverTwilight、 rongyi、gyt95、zhuoqinyue、K3v123、Zuoxun、mingXta、hello‑ikun、FangYuan33、GN‑Yu、yuelinxin、 longsizhuo、Cathay‑Chen、guowei‑gong、xBLA 、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0b2 C++版从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表; ‧ 非线性数据结构:树、图、堆、哈希表; Figure 3‑3 9. 图 hello‑algo.com 137 Figure 9‑5. 图的邻接矩阵表示 邻接矩阵具有以下性质: ‧ 顶点不能与自身相连,因而邻接矩阵主对角线元素没有意义。 ‧「无向图」两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 , 0 替换为权重,则能够表示「有权图」。 使用邻接矩阵表示图时,我们可以直接通过访问矩阵元素来获取边,因此增删查操作的效率很高,时间复杂度 < 0 || i >= size() || j >= size() || i == j) { throw out_of_range(" 顶点不存在"); } // 在无向图中,邻接矩阵沿主对角线对称,即满足 (i, j) == (j, i) adjMat[i][j] = 1; adjMat[j][i] = 1; } /* 删除边 */ // 参数 i, j 对应 vertices 元素索引0 码力 | 197 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 C++版从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表; ‧ 非线性数据结构:树、图、堆、哈希表; Figure 3‑3 9. 图 hello‑algo.com 137 Figure 9‑5. 图的邻接矩阵表示 邻接矩阵具有以下性质: ‧ 顶点不能与自身相连,因而邻接矩阵主对角线元素没有意义。 ‧「无向图」两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 , 0 替换为权重,则能够表示「有权图」。 使用邻接矩阵表示图时,我们可以直接通过访问矩阵元素来获取边,因此增删查操作的效率很高,时间复杂度 < 0 || i >= size() || j >= size() || i == j) { throw out_of_range(" 顶点不存在"); } // 在无向图中,邻接矩阵沿主对角线对称,即满足 (i, j) == (j, i) adjMat[i][j] = 1; adjMat[j][i] = 1; } /* 删除边 */ // 参数 i, j 对应 vertices 元素索引0 码力 | 197 页 | 15.72 MB | 1 年前3
 《深入浅出MFC》2/e左营luke@orchid.ee.ntu.edu.tw 侯先生你好:我现在是一名信息预官,还在左营受训。因为受训的关系所以偶然间有机会读 到你写的深入浅出MFC 第二版。本以为这么大一本书,一定很难K,但从第一眼开始我 就深深的被其中优雅且适当的文辞所吸引。尤其当阅读第三章时,那些表格让我回忆起以前 修过advanced compiler 去trace java compiler 的那段过程,不禁发出会心一笑。 information、dynamic creation、persistence、document/view¡ K。 注2:此指message based、event driven 之programming model。 注3:此指message mapping、command routing ¡ K。 2 在技术层次上,唯MFC Internals 堪与本书比拟(本书附录A附有MFC Internals 例如JBACKUP g: k: 将磁盘目录SrcDir 中的新文件拷贝到磁盘目录DstDir, 并将DstDir 的赘余文件杀掉。 如果没有指定DstDir,预设为k: (那是我的可写入光驱-- MO -- 的代码啦) 并将k: 的磁盘目录设定与SrcDir 相同。 例如JBACKUP g: 而目前g: 是g:\u002\doc 那么相当于把g:\u002\doc 备份到k:\u002\doc0 码力 | 1009 页 | 11.08 MB | 1 年前3 《深入浅出MFC》2/e左营luke@orchid.ee.ntu.edu.tw 侯先生你好:我现在是一名信息预官,还在左营受训。因为受训的关系所以偶然间有机会读 到你写的深入浅出MFC 第二版。本以为这么大一本书,一定很难K,但从第一眼开始我 就深深的被其中优雅且适当的文辞所吸引。尤其当阅读第三章时,那些表格让我回忆起以前 修过advanced compiler 去trace java compiler 的那段过程,不禁发出会心一笑。 information、dynamic creation、persistence、document/view¡ K。 注2:此指message based、event driven 之programming model。 注3:此指message mapping、command routing ¡ K。 2 在技术层次上,唯MFC Internals 堪与本书比拟(本书附录A附有MFC Internals 例如JBACKUP g: k: 将磁盘目录SrcDir 中的新文件拷贝到磁盘目录DstDir, 并将DstDir 的赘余文件杀掉。 如果没有指定DstDir,预设为k: (那是我的可写入光驱-- MO -- 的代码啦) 并将k: 的磁盘目录设定与SrcDir 相同。 例如JBACKUP g: 而目前g: 是g:\u002\doc 那么相当于把g:\u002\doc 备份到k:\u002\doc0 码力 | 1009 页 | 11.08 MB | 1 年前3
 Hello 算法 1.0.0b1 C++版从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表; ‧ 非线性数据结构:树、图、堆、哈希表; Figure 3‑3 9. 图 hello‑algo.com 137 Figure 9‑5. 图的邻接矩阵表示 邻接矩阵具有以下性质: ‧ 顶点不能与自身相连,因而邻接矩阵主对角线元素没有意义。 ‧「无向图」两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 , 0 替换为权重,则能够表示「有权图」。 使用邻接矩阵表示图时,我们可以直接通过访问矩阵元素来获取边,因此增删查操作的效率很高,时间复杂度 < 0 || i >= size() || j >= size() || i == j) { throw out_of_range(" 顶点不存在"); } // 在无向图中,邻接矩阵沿主对角线对称,即满足 (i, j) == (j, i) adjMat[i][j] = 1; adjMat[j][i] = 1; } /* 删除边 */ // 参数 i, j 对应 vertices 元素索引0 码力 | 187 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 C++版从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表; ‧ 非线性数据结构:树、图、堆、哈希表; Figure 3‑3 9. 图 hello‑algo.com 137 Figure 9‑5. 图的邻接矩阵表示 邻接矩阵具有以下性质: ‧ 顶点不能与自身相连,因而邻接矩阵主对角线元素没有意义。 ‧「无向图」两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 , 0 替换为权重,则能够表示「有权图」。 使用邻接矩阵表示图时,我们可以直接通过访问矩阵元素来获取边,因此增删查操作的效率很高,时间复杂度 < 0 || i >= size() || j >= size() || i == j) { throw out_of_range(" 顶点不存在"); } // 在无向图中,邻接矩阵沿主对角线对称,即满足 (i, j) == (j, i) adjMat[i][j] = 1; adjMat[j][i] = 1; } /* 删除边 */ // 参数 i, j 对应 vertices 元素索引0 码力 | 187 页 | 14.71 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 支持。他用 std::thread 这个类来表示线 程。 • std::thread 构造函数的参数可以是任意 lambda 表达式。 • 当那个线程启动时,就会执行这个 lambda 里的内容。 • 这样就可以一边和用户交互,一边在另一 对象移动到一个全局变量去, 从而延长其生命周期到 myfunc 函数体外 。 • 这样就可以等下载完再退出了。 main 函数退出后自动 join 全部线程 • 但是需要在 main 里面手动 join 全部线 程还是有点麻烦,我们可以自定义一个类 ThreadPool ,并用他创建一个全局变量, 其解构函数会在 main 退出后自动调用。 std::jthread :符合 RAII 思想,解构时自动 func 里的 unlock() 永远得不到调用。 解决 1 : other 里不要再上锁 • 遇到这种情况最好是把 other 里的 lock() 去掉,并在其文档中说明:“ other 不是线 程安全的,调用本函数之前需要保证某 mutex 已经上锁。” 解决 2 :改用 std::recursive_mutex • 如果实在不能改的话,可以用 std::recursive_mutex0 码力 | 79 页 | 14.11 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 支持。他用 std::thread 这个类来表示线 程。 • std::thread 构造函数的参数可以是任意 lambda 表达式。 • 当那个线程启动时,就会执行这个 lambda 里的内容。 • 这样就可以一边和用户交互,一边在另一 对象移动到一个全局变量去, 从而延长其生命周期到 myfunc 函数体外 。 • 这样就可以等下载完再退出了。 main 函数退出后自动 join 全部线程 • 但是需要在 main 里面手动 join 全部线 程还是有点麻烦,我们可以自定义一个类 ThreadPool ,并用他创建一个全局变量, 其解构函数会在 main 退出后自动调用。 std::jthread :符合 RAII 思想,解构时自动 func 里的 unlock() 永远得不到调用。 解决 1 : other 里不要再上锁 • 遇到这种情况最好是把 other 里的 lock() 去掉,并在其文档中说明:“ other 不是线 程安全的,调用本函数之前需要保证某 mutex 已经上锁。” 解决 2 :改用 std::recursive_mutex • 如果实在不能改的话,可以用 std::recursive_mutex0 码力 | 79 页 | 14.11 MB | 1 年前3
共 188 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19













