基于进程
1 | Fork() |
共享信息比thread少,浪费资源
基于IO Multiplexing
就是使用select操作fdset
1 | int select(int n, fd_set *fdset, NULL,NULL,NULL); |
fdset就是fd列表的bitmap,n是大小,有这些宏操作指令
1 | FD_ZERO(fd_set *fdset); //统统清空 |
基于线程
API
1 | int pthread_create(pthread_t *tid, pthread_addr_t *addr, func *f, void *arg); |
线程同步
共享变量count问题
1 | 其他指令H |
进度图
Semaphore
然后就要锁定不安全区
就是看每个点只能往上和往右走,但是P操作可能会被block,V操作是自由的
红线就是被block的P操作。保护出来走不到的点就是禁止区。
线程不安全的情况
- 共享变量
- 调用线程不安全的函数
死锁
书里说的重叠就是死锁,不是说禁止区重叠,而是block的红线相交了,交点左下角那个地方又不能往上,又不能往右,死锁。
感觉这个进度图不太实用,一般判断死锁也不会去画这个。。。