2016-07-04
更多 →
2016-06-30
更多 →
2016-06-06

测试 fork 的时候,出现以下的一个情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <unistd.h>

int main(int argc, char const *argv[]){
printf("%s,parent:%d,current:%d\n", "start", getppid(), getpid());
pid_t fpid;
fpid = fork();
if (fpid < 0){ //error
printf("%s:%d\n", "error", fpid);
}else if (fpid == 0){ //child
printf("%s,parent:%d,current:%d, fpid:%d\n", "child", getppid(), getpid(), fpid);
}else{ //host
printf("%s,parent:%d,current:%d, fpid:%d\n", "host", getppid(), getpid(), fpid);
}
return 0;
}

按理来说,结果应该是

start,parent:15111,current:19431
host,parent:15111,current:19431, fpid:19432
child,parent:19431,current:19432, fpid:0

但是在 sublime 使用 CTRL + SHIFT + B 执行的时候,结果却是:

start,parent:15111,current:19431
host,parent:15111,current:19431, fpid:19432
start,parent:15111,current:19431
child,parent:19431,current:19432, fpid:0
更多 →
2016-05-30
更多 →
2016-05-20
更多 →
2016-05-10
更多 →
2016-05-08

核心原理

  1. ThreadLocal 处理的是线程的专属对象,各个线程的对象都是独立的。
  2. ThreadLocal 用来辅助平衡效率与资源分配。
  3. ThreadLocal 不是同步机制,也不解决共享对象的多线程竞态条件问题。

基本设计

首先看一个熟悉的场景:排队买票。

从理论上看,针对“排队买票”这个场景,我们可以有以下几种方案设计:

第一种. 固定设置一个售票窗口,每新来一个购票者就排在队伍的最后面。如图:

1

第二种. 动态设置售票窗口数量,每新来一个购票者就新开一个窗口来进行接待。如图:

1

第三种. 固定设置 N 个售票窗口,每新来一个购票者就选择一个售票窗口。如图:

1

比较一下上面的三种方案,很明显现实社会中使用的是第三种,那么各自有什么优势与缺点呢?

更多 →
2016-05-06
更多 →
2016-04-24
更多 →
2016-04-12
更多 →