摘要:
一、条件变量的引入 std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待。当互斥操作不够用而引入的。比如,线程可能需要等待某个条件为真才能继续执行,而一个忙等待循环中可能会导致所有其他线程都无法进入临界区使得条件为真时,就会发生死锁。所以,condit 阅读全文
摘要:
序言 互斥锁保证了线程间的同步,但是却将并行操作变成了串行操作,这对性能有很大的影响,所以我们要尽可能的减小锁定的区域,也就是使用细粒度锁。 这一点lock_guard做的不好,不够灵活,lock_guard只能保证在析构的时候执行解锁操作,lock_guard本身并没有提供加锁和解锁的接口,但是有 阅读全文
摘要:
一、死锁的产生 死锁的原因有两个 a、mutex的lock正确执行了,但是使用资源的时候发生了异常,导致unlock虽然调用了,但是没有执行,也就没有解锁 b、多把锁 两个mutex的时候,mutex1,mutex2 如果两把锁两个线程的顺序不一致,会造成相互等待释放资源,造成死锁 二、死锁的避免 阅读全文
摘要:
一、数据竞争的产生 在下面例子中: void function_1() { for (int i = 0; i < 100; i++) { std::cout << "from function 1:" << i << std::endl; } } int main() { std::thread 阅读全文
摘要:
1、简单的例子 #include "stdafx.h" #include <iostream> #include <thread> void function_1() { for (size_t i = 0; i < 100; i++) { std::cout << "from function 1 阅读全文
摘要:
一、原理与目录 先介绍几个和apt-get相关的目录: /var/lib/dpkg/available文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 Debian 安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包. /var/cache/apt/archives目录是在用 阅读全文
摘要:
概述: WPF中的Canvas是常用的一个绘图控件,可以方便地在Canvas中添加我们需要处理的各种元素如:图片、文字等。但Canvas中元素增加到一定数量,并且有重合的时候,我们如何通过在Canvas中点击鼠标,获得我们想要的元素,然后再对该元素做出相应的控制? 命中测试,可以很好地解决这个问题 阅读全文