- 博客(6)
- 收藏
- 关注
原创 C++ 获得程序运行时间
有时候需要知道自己的某段函数运行了多少时间,在C语言里可以用time_t,C++有一个新的命名空间: std::chrono。可以计算出毫秒、微秒、纳秒: std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); std::this_thread::sleep_for(std::chrono
2017-09-11 18:43:21 928
原创 STL实现读写锁
在这里不考虑std::shared_mutex, 只用条件变量和std::mutex来实现。分析读写锁的逻辑:读锁之间是不冲突的,无论多少个线程申请读锁,不需要等待。但是要想获得写锁,就必须等所有的读锁全部释放完毕。那么怎么知道所有的读全部结束了呢?只能用一个int变量去记录读锁的总数。这个变量变为0意味着所有的读都结束了。所以,写锁的条件变量的写法类似于: while (reade
2017-08-29 21:53:56 3394
原创 高性能的随机数算法std::mt19937
相对于传统的srand(),std::mt19937拥有更好的性能。使用方法: std::mt19937 generator(std::chrono::system_clock::now().time_since_epoch().count()); unsigned int random1 = generator(); unsigned int random2 = generator
2017-08-24 00:11:02 9794
原创 c++ 简化版lambda的介绍
lambda表达式,也叫匿名函数,本质上就是一个函数,只是这个函数没有名字。函数没有名字有什么好处呢?写得比较快啊。【需要注意发音,这个单词lambda中间的b是不发音的。】lambda表达式的完整形式很长很繁杂,实际应用中不可能用得太繁杂。因为又繁杂又没有函数名字会造成理解上的困难,没有必要了。常见的简化版的lambda表达式有三个要素:中括号、小括号、大括号[](){}中括
2017-08-23 23:26:08 535
原创 关于std::condition_variable需要注意的地方spurious wake-ups
在使用条件变量的时候,一定要放在一个循环里,这是为什么呢?因为spurious wake-ups什么是spurious wake-ups?Because of some complications in making the condition wake-up completely predictable on multiprocessor systems, spurious wa
2017-08-23 22:19:01 462
原创 std::lock的使用方法
假设有两个mutex(m1、m2),一个线程先锁住m1再锁住m2,另一个线程先锁住m2,再锁住m1,就有可能会出现死锁。std::lock内部使用了死锁避免的算法,可以有效避免死锁。有两种用法:std::lock(m1, m2)std::lock_guard lock1(m1, std::adopt_lock)std::lock_guard lock2(m2, std::adopt
2017-08-23 11:53:22 5315 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人