• c++线程池实现

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

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

  • c++11并发编程api

    Forums: 

    本帖罗列 c++ 11 中关于并发多线程编程的 api (application programming interface),实际上就是一些类和函数等。

  • Go的内存模型

    Golang 官网有一个单独的页面介绍 —— Go的内存模型。me 这里算是将它翻译一下,然后配几个小程序,再加点(个人)说明。me 表示对某些东西也不是太懂,赶脚有些地方有些模糊,甚至有些奇怪。翻译水平有限,不要骂 me,O__O"…

    Tags: 

  • 偏序、全序和良序关系

    偏序、全序和良序关系

    虽然 us 都不是搞数学的,然而总是时不时地会遇到这些说法,比如今天看曾经写的一篇Go的内存模型的时候就又遇到了“偏序关系”这种说法。通常比较抽象的关系,me 们会用某种数学或是生活中的数量关系来类比说明,比如自然数的 $$ \leqslant $$ (小于等于)关系,比如一个家庭族谱中的“晚辈-长辈”关系。

    “关系” (relation) R 通常说的是二元关系,就是两个元素(不管是数,还是人,或是其他东西啦) a 、b 之间的关系。在计算机科学中 (a,b)∈ R 或是 aRb 说明 a 和 b 满足关系 R,比如“张三是李四的爸爸” (这肿么可能 ? O__O"…) ;而 (a,b) ∉ R 说明 a、b 不满足关系 R,比如“张三不是王五的爸爸”。R 视作满足关系的所有这样的序偶 (a,b) 的集合,所以前面用了 ∈ 和 ∉ 这种记法。

    Tags: 

  • 站点迁移

    只怪当时太年轻,选择了 SAE + Drupal 。 当时 SAE 还是免费的,现在早就不是了。更令人可悲的是使用了 drupal ,一个复杂得让人有些无语的 CMS 框架,对于只是想建立一个小站而不会做过多修改的人来说可能是一个不错的选择,但是对于另外一些人就不是了。

    以后 me 的内容更新会放到 http://www.lrj.name 之上,那是 me 用 Node 实现的一个个人站点,虽然还很简陋,但是自己完全可控。 运行在 OpenShift 之上。

    本站点依然可用, 所有的访问也都是有效的。 如果 u 是本来在访问 http://www.lrj.name ,后来网页链接跳到了本站之上也不要奇怪。

    Tags: 

  • NoSQL数据库

    Forums: 

    NoSQL 数据库,最初的意思是 Not SQL 数据库,就是反SQL 的数据库;but 后来发现,SQL 数据库还是灰常有用的,于是就变成 Not only SQL 的说法了。

    SQL

    SQL 是数据库模型的一种,数据库 (database) 由表 (table) 构成,表由记录(record 或是分组) 构成,每个记录具有同样的结构或是说相同的列,每一列不能复合和嵌套。这种比较固定的模型叫 schema (模式), 数据库有时候又称 schema 。

    一般一个数据库 database 包含多张表 table, 每张表都是一个二维的表格数据,每一行就是一条记录。表与表通过一些列关联起来,叫外键(列)。数据库的主要操作 : 增查改删 CRUD 。

  • gcc命令

    GCC说明

    GCC 最初是 GNU C Compiler 的缩写,也就是最初是 c 编译器,后来演变成了 GNU Compiler Collection 的缩写,也就是成了一个编译器的集合。GCC 可以编译 c 、c++、、objective-c、objective-c++、java、pascal、ada 等语言,不过很多时候 me 们关心的是如何编译 c 和 c++。linux 主要是用 c 写的,其上的各种实用工具(比如各种命令)一般也是 c 写成的;而 GCC 最初也是用 c 写的,后来改用了 c++。

    通常用 gcc 命令来编译 c 文件,用 g++ 命令来编译 c++ 文件。不过也可以使用 gcc 来编译 c++ 文件(链接 libstdc++ 库而不是 glibc 库)。下面主要是通过 gcc 命令来说明编译,g++ 的基本是一样的。

    编译过程

    假设现在有一个 hello.c 文件:

    Tags: 

  • linux基本命令

    很早就开始玩 linux 了,算算的话,玩过 fedora、ubuntu、红旗(已经关门大吉)、opensuse、gentoo,现在是 centos。以前都太过于浅尝辄止,要么就是只玩下桌面环境,要么就是学习 c/c++ 开发,没有把它太当一个事。命令没有记住几个,系统管理完全不会。现在打算好好玩玩,主要是玩命令行,图形界面的话,主要就是上个网。下面是命令行操作的一些常用,或是基本的命令,罗列一下,以作纪念,O__O"…。

    普通用户的命令提示符是 $,管理员(root)的命令提示是 # ,命令后面的 # 部分是注释

    Tags: 

  • 意想不到的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 亦如此。

Pages