![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
tillmanSkate
这个作者很懒,什么都没留下…
展开
-
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 · 5256 阅读 · 1 评论 -
关于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 · 429 阅读 · 0 评论 -
高性能的随机数算法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 · 9673 阅读 · 0 评论 -
STL实现读写锁
在这里不考虑std::shared_mutex, 只用条件变量和std::mutex来实现。分析读写锁的逻辑:读锁之间是不冲突的,无论多少个线程申请读锁,不需要等待。但是要想获得写锁,就必须等所有的读锁全部释放完毕。那么怎么知道所有的读全部结束了呢?只能用一个int变量去记录读锁的总数。这个变量变为0意味着所有的读都结束了。所以,写锁的条件变量的写法类似于: while (reade原创 2017-08-29 21:53:56 · 3367 阅读 · 0 评论