摘要:
快手一面的第三个算法题: 方法一:通过一个辅助栈实现在O(1)的时间内返回栈的最小值,但空间复杂度为O(n) 方法二:如何在O(1)的空间复杂度下找出最小值min:栈内不存储val,而是存储val-min 1 class MinStack { 2 public: 3 /** initialize y 阅读全文
摘要:
虚假唤醒: 当 wait() 不带有第二个判断条件参数时会发生虚假唤醒的情况,所以wait()中尽量要带有第二个参数,并且这个lambda表达式要正确判断处理的公共数据是否存在。条件变量很重要,以后会经常用到。 atomic: std::atomic<int> atm = 0; cout << at 阅读全文
摘要:
windows临界区 属于C++语法,可以跨平台。 Windows临界区,同一个线程是可以重复进入的,但是进入的次数与离开的次数必须相等。 C++互斥量则不允许同一个线程重复加锁。 RAII类:(Resource Acquisition is initialization)资源获取及初始化:构造函数 阅读全文
摘要:
std::async深入理解,async 用来创建一个异步任务: std::async()我们一般不叫创建线程(他能够创建线程),我们一般叫它创建一个异步任务。 std::async和std::thread最明显的不同,就是 async 有时候并不创建新线程。 如果用std::launch::def 阅读全文
摘要:
std::atomic原子操作: 互斥量:多线程编程中 用于保护共享数据:先锁住, 操作共享数据, 解锁。 有两个线程,对一个变量进行操作,一个线程读这个变量的值,一个线程往这个变量中写值。 即使是一个简单变量的读取和写入操作,如果不加锁,也有可能会导致读写值混乱。 一条C++语句 i++ 会被拆成 阅读全文