c++

c++线程池实现

咳咳。c++11 加入了线程库,从此告别了标准库不支持并发的历史。然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池、信号量等。线程池(thread pool)这个东西,在面试上多次被问到,一般的回答都是:“管理一个任务队列,一个线程队列,然后每次取一个任务分配给一个线程去做,循环往复。” 貌似没有问题吧。但是写起程序来的时候就出问题了。

废话不多说,先上实现,然后再啰嗦。(dont talk, show me ur code !)

意想不到的c++:程序结果的多输出

不修改 main 函数, me 们能多大程度去影响程序的输出结果呢?!或是说,如何才能在不修改 main 的情况下去修改程序的输出结果?面试中可能经常问到的一个问题:下面是输出 hello,world 的程序代码

Tags: 

centos下安装llvm+clang

不知道从神马时候开始,llvm+clang 就进入了 me 的眼球,以前只知道有 gcc,有 vc++。llvm 是个编译器的 back-end,像 JVM 或是 .NET 的 CLR (公共语言运行时), clang 是编译器的 front-end,负责将 c、c++、objective-c、objective-c++ (objective-c 和 c++的混合) 编译成中间语言。 c++11/14 支持最好的两个编译器 gcc 和 clang,前者版本到了 4.8.2 (GCC),后者 3.4 (Clang)。gcc 是前辈,而 clang 是后起之秀,对于学习 c++14 来说更好的选择是 clang (完全支持 c++11 语言、库和 c++14 的所有草案)。

me 使用的是 centos 系统,使用赶脚很不爽,上面很多包没有安装是一方面,另一方面有些包的版本过低,如果自己安装的话,使用命令 $rpm -ql package 完全搜不到(安装信息),O__O"…。前面安装 GCC 4.8.1 如此,这次安装 llvm+clang 亦如此。

c++11介绍

废话少说

Tags: 

并查集(union-find-set)

并查集

并查集,即为 union find set,实际上就是说对于集合 set,只有两个操作, 查找 find 和合并 union。它是一种典型的数据结构,用在一些典型的地方。比如说有一些人,他们之间有些人是朋友关系,假设“朋友的朋友也是自己朋友”,那么这些人就可以分成若干伙儿,现在给出一些朋友关系,让给出有多少伙,以及每一伙儿都有哪些人。类似的问题还有很多,比如:

Tags: 

c++11中信号量(semaphore)的实现

c++11中有 mutex (互斥量),有 condition_variable (条件变量),并没有 semaphore (信号量)。信号量,操作系统中一般都有提,后来 google 说可以使用 mutex+condition_variable 实现一个,后来写来写去,都死锁 (deadlock) ——,O__O"…,后来 google 了一个,整理了一下思路。

信号量

神马是信号量?信号量是一个整数 count,提供两个原子(atom,不可分割)操作:P 操作和 V 操作,或是说 wait 和 signal 操作。

c++11中的同步方法

多线程编程中如果不出现数据共享的话,是最好不过的,“你走你的阳关道,我走我的独木桥” —— “大家井水不犯河水”;然而几乎不可能,因为很多时候只有共享数据才有意义。对于共享的数据,如果大家都是读(read)的话,也没有太大问题,麻烦就麻烦在有读(read)有写(write),可能是很多个读和很多个写,这个时候如果不做点什么的,结果就难以预料了,或是看到非预期的结果;这类问题叫数据竞争(data race)。下面是 c++ 的一个多线程程序,创建三个线程 th1、th2、th3,大家把共享的数据 sum (初始值为 0)各加 100000,预期的结果是 300000。

Tags: 

网易腾讯阿里云大众点评面试

生活中充满了种种不顺心的事,即使如此,该如何呢?顺从天意?——随遇而安吧。今天周四,上周五是腾讯的面试,面试的过程赶脚灰常良好丫,但是晚上也没有通知二面,有些失落,后来得知还是被刷了。同样的上周五,下午阿里云通知周二下午面试,接着大众点评通知周二上午电面。悲喜交加。网易开始的时间很早,网易游戏 me 也没有报,网易互联网也是悲剧收场,O__O"…。这周二,就是前天了,上午没有等来大众点评的电面,中午去了阿里云,表现一般般,甚至 me 感觉有点不良好,具体的后面会说;下午五点左右(me还在床上)大众点评电面。基本就是这些情况了。

Tags: 

2013年微软实习生招聘笔试题目

今天本是清明放假,但是,但是微软就是在今天下午组织了笔试考试,据说是全国统考。75分钟,20 道选择题,问题是,问题是神马?先看下简单的评分:

1-8      3     2    -2     0
9-18     5     3    -3     0
19-20    13    7    -7     0

1-8 每题 3 分,完全正确 3 分,不完全正确但是没有错误 2 分,有错误 -2 分,不做 0 分;19、20 题,完全正确 13 分,有错就是 -7 分,不做 0 分。是的,么有看错,有负分!做错了,不仅意味着本道题的分不得,而且要倒扣,简单滴说,最后一题做错了,就会从 100 分中扣去 20 分,因为本题得分 -7 分!如果题目全部都错做了,估计是 -50 多分!

Tags: 

c++11并发多线程编程

c++11 出来快有两年了,其在 98/03 年的基础上增添了不少东西,右值引用、移动语义、类型推断、lambda 表达式、统一初始化等等等等,标准库中也增加了并发/多线程、正则表达式支持。vs 2012 对 c++11 有部分支持;gcc 4.7.x 有大部分支持,但是不支持多线程,而 4.8.0 对 c++11 几乎全部支持(官网上说 *this 的右值引用、小型垃圾回收器和内存泄露检测不支持),目前最新的版本已到 4.8.1。llvm+clang 3.2 对 c++11 也接近全部支持。所以学习 c++11 可以考虑使用前面的三个编译器。

Tags: 

Pages