穷举搜索

实质是创建一个状态树,边建立边剪枝,得到最终状态输出
步骤有:

  1. 列出表示状态的数据结构
  2. 列出在状态之间迁移的动作的数据结构
  3. 列出两个状态转换的所有动作列表
  4. 创建一个deque存储搜索的状态
  5. 从deque尾端取出状态,判断是否是最终状态,是的话打印当前deque,进行搜索search,循环所有动作,执行动作searchOnOneAction
  6. 判断新状态是否有效,有效则加入deque,继续递归调用搜索

并发服务器

  1. fork进程
  2. IO复用
  3. 线程

多进程

主进程监听,在循环中接受连接请求,当连接建立后,fork一个子进程,在子进程中进行处理。

  • 主进程:listen -> while(1) -> accept -> fork -> close connfd

  • 子进程:close listenfd -> handle -> close connfd

web服务器

首先创建几个函数以方便我们调用

  • open_clinetfd: 创建一个网络socket,作为客户端,并且尝试连接主机
  • open_listenfd: 创建socket,作为主机,并开始监听

守护进程

守护进程

  • 生存期长,常常在系统引导装入时启动,仅在系统关闭时终止
  • 没有控制终端

如何编写

  1. umask(0)
  2. 调用fork,使父进程exit
  3. setsid创建一个新会话
  4. 工作目录改为根目录
  5. 关闭不需要的文件描述符
  6. 关闭标准输入输出

线程同步2

线程同步2

时间锁

1
2
3
#include <pthread.h>
#include <time.h>
int pthread_mutex_timedlock(pthread_mutex_t * restrict mutex, const struct timespec *restrict tsptr);

愿意等待timespec描述的时间,达到时间返回错误码ETIMEOUT
一个例子