摘要: 可参考:https://www.cnblogs.com/wengle520/p/12411812.html 阅读全文
posted @ 2020-03-04 20:17 wengle 阅读(987) 评论(0) 推荐(0) 编辑
摘要: 可参考:https://www.cnblogs.com/wengle520/p/12411812.html 阅读全文
posted @ 2020-03-04 20:15 wengle 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 在多线程编程中,锁是常用地控制并发的机制,对于临界区的资源,需要保证线程之间互斥地访问。 1. 可重入锁 可重入锁,也叫做递归锁,指的是多次对同一个锁进行加锁操作,都不会阻塞线程。实现思路:记录当前锁正在被哪个线程使用,采用计数来统计lock和unlock的调用次数。正常情况下,lock和unloc 阅读全文
posted @ 2020-02-26 19:51 wengle 阅读(950) 评论(3) 推荐(1) 编辑
摘要: 乐观锁、悲观锁是从其使用角度来看。(PS:比如ReentrantLock内部实现用到了CAS和自旋来提高性能,但是从其使用角度来看,是用到了悲观锁的思想。) 1. 乐观锁 乐观锁:顾名思义就是在操作时很乐观,认为操作不会产生并发问题(不会有其他线程对数据进行修改),因此不会上锁。但是在更新时会判断其 阅读全文
posted @ 2020-02-26 18:32 wengle 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 刷完了LeetCode链表相关的经典题目,总结一下用到的技巧: 1. 技巧 1. 哑节点 哑节点可以将很多特殊case(比如:NULL或者单节点问题)转化为一般case进行统一处理,这样代码实现更加简洁,优雅 2. 两个指针 链表相关的题目一般都需要用到两个指针:prev指针和cur指针 3. 头插 阅读全文
posted @ 2020-02-25 22:08 wengle 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 多线程同步问题,都需要用到监视器,用来监视资源是否可用。C++中使用condition_variable,Java中使用Condition来实现同步。 1. 实现思路 1. 需要有一个全局变量控制当前该哪个线程访问资源 2. 调用wait,让出资源使用权 3. 调用notify,通知线程访问资源 2 阅读全文
posted @ 2020-02-25 14:02 wengle 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 写博客的时候,经常会出现不知道该用哪个de的情况,所以特意查了一下,记录下来。 三个"de"最主要的功能都是连接前后两个词(或者词组),那么我们只要看它们三个分别连接什么词就可以了。 1. 地:后面是动词或形容词,前面是副词或形容词(词组),前面的词描述后面的 2. 得:前面是动词,后面是形容词,后 阅读全文
posted @ 2020-02-24 20:15 wengle 阅读(1076) 评论(3) 推荐(0) 编辑
摘要: 本文介绍如何为自己的终端设置代理,从而实现在命令行中访问Google。 1. 背景 当你使用SS FQ时,大部分浏览器都可以成功访问Google,但是在命令行下执行 时,会超时失败。对于类似的这种情况,本文将解释出现这种现象的原因,并给出有效的解决方案。 2. 原因 1. 启动SS时,会创建两个代理 阅读全文
posted @ 2020-02-23 12:24 wengle 阅读(11142) 评论(2) 推荐(1) 编辑
摘要: 本文主要介绍 如何设计一个高效通用的线程池 。详细说明了一个线程池由哪几部分组成,最后通过100行C++代码实现一个高效通用的线程池。 1. 线程池的基础元素 1. std::vector\ workers 2. std::queue\ tasks 3. std::mutex queue_mutex 阅读全文
posted @ 2020-02-22 16:31 wengle 阅读(673) 评论(0) 推荐(0) 编辑
摘要: 1. 原题链接:https://leetcode.com/problems/lru cache/ 2. 解题思路 1. 为了增删改查都有较高的性能,使用双向链表和哈希表的组合 2. 针对LRU,哈希表对于查询和修改可以实现O(1)的时间复杂度,但是无法在O(1)时间复杂度实现删除操作 3. 双向链表 阅读全文
posted @ 2020-02-20 16:39 wengle 阅读(213) 评论(0) 推荐(0) 编辑