- 博客(11)
- 收藏
- 关注
转载 Linux条件变量(pthread_cond)示例
条件变量详解如果线程正在等待某个特定条件发生,它应该如何处理这种情况?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。解决这个问题的最佳方法是使用 pthread_cond_wait() 调用来等待特殊条件发生。了解 pthread_cond_wait() 的作用非常重要 – 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。首先,让我们考虑以下情况:线程为查看已链接列表而锁定了互斥对象,然而该列表恰巧是空的。
2020-08-16 02:42:51
2023
2
原创 C++ 重载()符号
作为运算符重载话不多说,代码最直观#include <iostream>#include <string>using namespace std;//定义函数对象类class cmp {public: //重载 () 运算符 bool operator ()(const string &a,const string &b) { //按照字符串的长度,做升序排序(即存储的字符串从短到长) return (a
2020-08-10 23:54:10
2584
转载 浅析HTTPS——SSL/TLS协议
SSL/TLS的历史在了解SSL的历史时,有必要提一下Mozilla Foundation。说到Mozilla,首先我们想到的是他们著名的浏览器Firefox。根据各种消息来源来看,Firefox是继Chrome和Safari之后最受欢迎的浏览器。但Firefox杰出的前身是Netscape,在90年代它是互联网用户中最受欢迎的浏览器。1994年,Netscape为Netscape Navigator浏览器研发了SSL。其作用主要是为了防止中间人攻击。后来,随着互联网可访问性的增加,银行开始利用互联网进
2020-07-28 14:31:29
235
转载 C++多态相关
虚函数表当通过指针访问类的成员函数时:如果该函数是非虚函数,那么编译器会根据指针的类型找到该函数;也就是说,指针是哪个类的类型就调用哪个类的函数。如果该函数是虚函数,并且派生类有同名的函数遮蔽它,那么编译器会根据指针的指向找到该函数;也就是说,指针指向的对象属于哪个类就调用哪个类的函数。这就是多态。编译器之所以能通过指针指向的对象找到虚函数,是因为在创建对象时额外地增加了虚函数表。如果一个类包含了虚函数,那么在创建该类的对象时就会额外地增加一个数组,数组中的每一个元素都是虚函数的入口地址。不过数组
2020-07-24 22:11:09
144
原创 浅析C++中迭代器(iterator)的失效情况
array/vector/deque这三种容器的内存空间连续,删除某一元素会导致其后所有元素前移。如图所示,删除某一元素后,后面的元素全都前移了一位。此时it3指向end位置。依照C++规定,包括it0在内的其后迭代器全部“失效”(尽管他们有些指向的是有效位置),对这些迭代器进行任何操作(解引用、调用符号重载函数等)都会抛出错误。解决方法:erase函数将返回下一个有效位置的迭代器例如://删除2之前的所有元素vector<int> vec{ 0,1,2,3 };for (a
2020-06-07 13:12:48
453
转载 浅析P2P:两个没有公网IP的终端如何进行通信?
转自P2P通信原理与实现(C++)这个博主关于网络和信息安全的文章写得很详细,推荐1.简介当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信。这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还有其他中间件如防火墙阻挡了链接的建立。当今部署的中间件大多都是在C/S架构上设计的,其中相对隐匿的客户机主动向周知的服务端(拥有静态IP地址和DNS名称)发起链接请求。大多数中间件实现了一种非对称的通讯模型,即内网中的主机可
2020-06-01 20:58:22
11270
6
原创 浅析Linux下的后台进程和守护进程
后台进程使用命令建立后台进程程序运行命令+& 可使程序进入后台运行。后台进程无法接受终端的标准输入,但标准输出依然可输出至终端。由于不接受终端输入所以无法用Ctrl+C终止进程,可使用kill命令若程序未对SIGHUP信号做处理,在终端关闭时即使运行在后台的进程也会被终结(关于信号可见浅析Linux下常见信号(Signal))可使用nohup命令让进程忽略SIGHUP信号,使得在终端关闭后进程仍可运行此时进程的标准输出将被舍弃nohup ./sigtest &使用dae
2020-05-24 13:16:17
438
原创 浅析Linux下常见信号(Signal)
终端输入man 7 signal查看手册第一列(Signal)为信号名称第二列(Value)为信号对应的值(实际上就是个宏定义),有多个值是因为该信号量在不同平台下的值不同(如ARM/x86),其中第二个值对应x86平台。第三列(Action)为进程接收到信号后的默认行为,其中:Term = Terminate,进程终结Core = Core dump,进程终结并保存进程退出信息以供调试Ign = Ignore,忽略信号Stop,进程挂起/暂停Cont = Continue,激活挂起的进
2020-05-21 12:20:51
1180
原创 【LeetCode 37】解数独(递归回溯法)
题目编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。Note:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sudoku-s
2020-05-19 16:05:49
774
原创 【LeetCode 127】 单词接龙(BFS—BFS+字典—双向BFS+字典)
题目给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。 说明:如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设beginWord 和 endWord 是非空的,且二者不相同。 示例 1:输入: beginWord = “hit”, endWord
2020-05-19 13:06:21
343
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人