摘要:一小伙说他的程序死锁了,让帮忙看看。对死锁问题,首先祭出GDB这一神器。 (gdb) bt #0 0xffffe410 in __kernel_vsyscall () #1 0xf7fa790e in __lll_mutex_lock_wait () from /lib/libpthread.so.
阅读全文
摘要:先看下列代码的输出是什么?int main(){ int m[5] = { 0,1,2,3,4 }; int* p = (int*)(&m+1); printf("%d,%d\n", *(m+1), *(p-1)); return 0;}要知道这个输出,最关键的是要理解指针操作的“加”和“减”,假设
阅读全文
摘要:目录 目录 1 1. 概念 1 1.1. 双指针 1 1.2. 指针数组 1 1.3. 数组指针 1 2. 区别 2 3. 兼容性 2 4. 为何列数须相等? 2 5. 初始化 3 6. 转化 4 7. 双指针 6 8. 关系图 8 8.1. 数组、指针和双指针关系图 8 8.2. 数组和双指针关系
阅读全文
摘要:目录 目录 1 1. 概念 1 1.1. 双指针 1 1.2. 指针数组 1 1.3. 数组指针 1 1.4. 常见指针定义解读 1 2. 区别 2 3. 兼容性 2 4. 为何列数须相等? 2 5. “1”的含义 3 6. 回归本质 3 7. “*”和“[]” 7 1. 概念 1.1. 双指针 指
阅读全文
摘要:Redis的list经常被当作队列使用,左进右出,一般生产者使用lpush压入数据,消费者调用rpop取出数据。 这是很自然的行为,然而有时会发现lpush成功,但rpop并没有取到数据,特别是一些客户端库封装了rpop操作,添加了调用者无感知的自动重试。数据凭空消失,找不到问题所在。 实际上,这是
阅读全文
摘要:Linux开发一般会遇到“/proc/sys/vm/overcommit_memory”,即文件/etc/sysctl.conf中的vm.overcommit_memory,Overcommit的意思如同其字面意思,即进程可申请超出可用内存大小的内存(对进程而言实为虚拟内存,一个进程占用的虚拟内存空
阅读全文
摘要:目录 目录 1 1. 前言 1 2. 执行方式 1 3. 执行过程 3 4. 使用原则 3 1. 前言 Redis的实现保证eval的执行是原子的,即使eval执行的lua超时,Redis也不会自动终止执行。 官方说明如下: When a script reaches the timeout it
阅读全文
摘要:简使用pop,不能保证最少消费一次,比如pop超时可能中途丢失,或者消费者处理过程中异常而未能处理完。 解决此问题有多种方法: 1) 方法一:使用rpoplpush替代pop 这种方法相当于建立了一个回滚,由于操作是在redis端完成的,可保证数据不会丢,当消费者完成业务逻辑后,再清掉lpush的另
阅读全文