- 博客(79)
- 收藏
- 关注
原创 《c++并发编程》中无锁栈的实现为什么要用双引用计数器
c++并发编程》中,实现无锁栈用了引用计数技术。原因是,pop方法要删除栈顶中的节点,然而,由于1.读取栈顶指针->2.根据栈顶指针访问栈顶节点、获取栈顶节点所保存的数据以及下一个节点指针next_node->3.更新栈顶指针为next_node->4.删除栈顶节点这4个 步骤不能做到原子,所以可能出现下面情况,线程A执行完步骤1后,在执行步骤2之前,线程B一口气执行完步骤1-4,把节点删除了,然后线程A执行步骤2,就是一个空悬指针解引用的错误,因为线程A并不知道他要访问的节点,已经被线程B删除了。
2024-04-13 10:31:27 657 1
原创 https的过程以及为什么安全
他首先从CA处获得公钥,然后用公钥解密数字签名。然后用与CA同样的摘要算法对证书其他部分做摘要。如果一样,就可以证明证书确实是由CA颁发的。因为如果一个数字签名不是由CA的私钥加密的,CA的公钥解密出来的摘要就和客户自己对证书其他部门的摘要不同。然而,其他人几乎不可能有CA的私钥,所以他就无法冒充CA颁发证书。但这里的前提是,客户手上的CA的公钥,是真真正正的CA的公钥,而不是冒充的CA的公钥。要做到这点,只需要操作系统出厂时,由可信的操作系统厂商把真正的CA公钥提前注入到系统中即可。
2024-03-12 11:15:17 847
原创 pthread_cancel
延迟取消不会使得线程立即取消,只是给线程发送一个信号。线程会在取消点检查是否有信号,有信号才取消。也就是延迟到取消点取消。取消点有 IO(printf也是IO),pthread_mutex_lock(),phtread_join(),phtread_testcancel()函数等。目前,我没有 找到线程取消的回调函数写法。也就是线程被取消后,可能来不及释放它的资源。函数可以取消一个线程的执行。有两种取消方式:立即取消和延迟取消。
2024-02-07 11:41:18 393
原创 多进程共享的pthread_mutex_t
不用被设置为PTHREAD_PROCESS_SHARED的attr初始化mutex,mutex也能保证互斥:实验表明,如果进程不调用sleep(),省略与不省略步骤4-5的结果是一样的,没有任何两个进程同时进入临界区。不设置PTHREAD_PROCESS_SHARED可能还有其他不预期的事发生,所以还是设置PTHREAD_PROCESS_SHARED好。pthread_mutex_init有个规定,那就是它init的那片内存为全0。它就是mutex初始化时的一个指导,这个指导在哪个位置并不重要。
2024-01-21 17:43:35 465 1
原创 c++ 要求用户输入整数时的风险
不管用户输入的是什么,首先全都接受了,然后再转换为整数。这里使用stoi而不是atoi,是因为atoi在无法把字符串转化为数字时返回0。无法区分是数字就是0,还是无法转换。stoi在无法转化时是抛出异常且不返回。第三行使用getline,还是cin>>a_s。这样这些错误内容可能会使得后面的输入混乱。因为这些错误的内容可能会留在缓冲区。或者用不正确的值覆盖掉a的默认值。因为用户的输入可能无法转化为整数。或者除了整数外输入了额外的内容。为了保证不受用户错误输入的影响。要求用户输入整数时,如果直接这样。
2023-10-28 21:27:31 201
原创 c++和java实现策略模式的差异
c++的对象有两种实例化方式,一种是局部变量中直接实例化。一种是new出来的。java的对象构建,没有第一种方式,java的对象都是new 出来的。
2023-10-27 17:30:15 327
原创 读磁盘概述
一个磁盘有很多个盘面,上面是其中一个盘面,每个盘面对应一个磁头。磁盘的最小单元是扇区,通过CHS可以定位到一个确定的扇区,每个扇区一般是512个字节。
2023-08-02 20:19:51 292
原创 30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile
用的是它自己写的工具,叫edimg。使用方式如下读取fdimg0at.tek,在读取ipl.bin,从ipl.bin的开头读512个字节到fdimg0at.tek中,并另存为helloos.img。ipl.bin就是编译出来的二进制代码。可以用作者提供的启动程序,也可以用day1自己写的。作者提供的程序多了一些内容。是一些参数。
2023-07-22 20:16:55 130
原创 QTQSS设置背景只能被设置一次
但是运行时,一旦被设置了一次border-image,后面再设置border-image的时候已经没有效果了。当控件的属性为off的时候,背景为一张图片,属性为on的时候为另一张图片。
2023-04-10 22:07:31 74 1
原创 QT 支持多行粘贴的表格
从excel表格 中复制,然后选中表格单元格。ctrl+v粘贴。当表格行数不足的时候,会自动补充行。需要继承QTableView实现这个功能。
2023-04-07 00:02:15 317
原创 c++函数引用参数可能创建临时变量
c++引用参数也可能创建临时变量,这种情况发生在,实参类型与形参类型不同,但实参可以转化为形参类型,且形参类型是const的情况。另外,如果形参类型不是const,而实参类型与形参不匹配,那么编译是通不过的。
2023-03-28 16:03:37 140
原创 fatal error: GL/gl.h: No such file or directory
【代码】fatal error: GL/gl.h: No such file or directory。
2023-03-28 10:12:39 385
原创 c++子类构造函数与赋值号重载说明
子类构造时一定会调用父类的构造函数,如果用户没有说明调用父类的哪一个构造函数,则调用父类的无参构造函数。如果父类没有无参构造函数,则编译错误。
2023-03-22 20:04:18 133
原创 ubuntu 20隔离cpu,让某些线程独享cpu
本文介绍如何在ubuntu20 上隔离cpu,也就是让操作系统在用户没有明确指出将某线程运行在隔离cpu上的情况下,不把线程运行到隔离的cpu中。通过 这种方法,可以让某些线程独享cpu。
2023-02-16 15:00:06 761
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人