关闭

Memcached 二进制协议(BinaryProtocol) incr指令泄露内存数据的bug

缘起 最近有个分布式限速的需求。支付宝的接口双11只允许每秒调用10次。 单机的限速,自然是用google guava的RateLimiter。 http://docs.guava-libraries.googlecode.com/git-history/master/javadoc/com/google/common/util/concurrent/RateLimiter.html ...
阅读(4398) 评论(2)

C++11的thread代码分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ class thread thread类直接包装了一个pthread_t,在linux下实际是unsigned long int。 class thread { pthread_t __t_; id get_id() const _NOEXCEPT {return __t_;} } ...
阅读(9600) 评论(0)

C++11中的mutex, lock,condition variable实现分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。 std::mutex 先来看下std::mutex: 包增了一个pthread_mutex_t __m_,很简单,每个函数该干嘛就干嘛。 class mutex...
阅读(8263) 评论(0)

C++11中once_flag,call_once实现分析

本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。 在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。 声明 首先来看一下once_flag和call_once的声明: struct once_flag { constexpr...
阅读(5261) 评论(0)

Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long ti...
阅读(18236) 评论(4)

并行编程之条件变量(posix condition variables)

在整理Java LockSupport.park()的东东,看到了个"Spurious wakeup",重新梳理下。 首先来个《UNIX环境高级编程》里的例子: #include struct msg { struct msg *m_next; /* ... more stuff here ... */ }; struct msg *workq; pthread_cond_t qread...
阅读(3881) 评论(1)

并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环

背景 大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码: static int flag = -1; void thread1(){ while(flag > 0){ //wait or do something } } void thread2(){ //do something f...
阅读(3791) 评论(1)

扯谈网络编程之Tcp SYN flood洪水攻击

简介 TCP协议要经过三次握手才能建立连接: (from wiki) 于是出现了对于握手过程进行的攻击。攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者如果处于公网,可以伪造IP的话,对...
阅读(16650) 评论(5)

扯谈网络编程之自己实现ping

ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。 ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程。 为什么用ping不能测试某一个端口 刚开始接触网络的时候,可能很多人都有疑问,怎么用ping来测试远程主机的某个...
阅读(4238) 评论(0)

[置顶] 详细解析boost中bind的实现

写在前面的话 在C++11之后,std::bind是C++标准库的一个组件了。一开始想弄个C++11的实现来研究下,发现里面用到了可变参数模板(代码变得非常神奇). http://llvm.org/svn/llvm-project/libcxx/trunk/include/functional 还是弄个原始点的boost的实现来研究下。 话说网上关于boost::bind的实现的文...
阅读(12408) 评论(19)

C++ 中cout<<endl的实现

话说像下面的语句,应该大家都明白这是通过重载operator cout<<123; cout 但是像 cout 是怎样实现的? 起初猜想endl是一个class或者struct,再通过一个friend函数来实现的。 但是翻下stl的实现,原来endl是一个函数! template inline basic_ostream& endl(basic_ostream& __os) {...
阅读(3749) 评论(0)

为什么逗号表达式返回最后一个表达式的结果?--从另一个角度看C++

auto v = func1(), func2(), func3(); 因为一个函数调用是要经过参数压栈,调用完了,还有退栈(栈清理)的过程。 而这个退栈的工作可以由调用者或者被调用者来进行,因此也分为两种不同的调用约定: __cdecl和_stdcall,当然这个扯远了。要是再扯远点,还有利用寄存器,省去压栈的fastcall和C++特有的thiscall。 正因为函数调用是一个不断地入...
阅读(1254) 评论(2)

[置顶] C++中虚函数(virtual function)到底有多慢

本文地址:http://blog.csdn.net/hengyunabc/article/details/7461919 虚函数为什么慢,cpu分支预测技术,虚函数到底要调用哪些汇编,虚函数实现的简单图示,虚函数不能内联, 印象中经常看到有人批评C++的虚函数很慢,但是虚函数为什么慢,虚函数到底有多慢呢? 一、理论分析 虚函数慢的原因主要有三个: 多了几条汇编指令(运行时得到对应...
阅读(4715) 评论(6)

100个开源C/C++项目中的bugs(二)未定义行为、与运算优先级相关的错误

from:http://www.oschina.net/question/1579_45444 未定义行为 首先,一小段理论知识 未定义行为是某些编程语言的特性(尤其在C和C++中),在某些情形下产生的结果將依赖于编译器的实现或指定的优化选项。换句话说,规范并没有定义 某情况下该语言的行为,仅仅是说:“在 A 条件下,B 结果是未定义的”。在这种情况下错误在你的程序中被认...
阅读(1321) 评论(0)

100个开源C/C++项目中的bugs(一)数组和字符串处理的错误

from:http://www.oschina.net/question/1579_45444 100个开源C/C++项目中的bugs 摘要 介绍 发现错误样本的各类开源项目 数组和字符串处理的错误 未定义行为 与运算符优先级相关的错误 格式化输出错误 代码打印错误例子 不正确的使用基本函数和类 无效代码的例子 总为 true 或 false 的条件...
阅读(2014) 评论(0)
17条 共2页1 2 下一页 尾页
    个人资料
    • 访问:1712164次
    • 积分:11722
    • 等级:
    • 排名:第1445名
    • 原创:129篇
    • 转载:29篇
    • 译文:2篇
    • 评论:350条
    博客专栏
    文章分类
    最新评论