解决什么问题
进程或线程同步
如何解决?
一个整数n,不允许小于0,小于0就会阻塞程序运行,两个操作来控制: sem_post(3)
每次+1, sem_wait(3)
每次-1。比如初始化时候n=0, 一个线程执行sem_wait()
,发现n是0,如果-1,就会小于0,但信号量不允许小于0,就等着。另一个线程执行sem_post()
,将n+1,此时n==1,sem_wait()
之后,n=0, 操作可以进行,第一个线程就可以继续往后了。
解决什么问题
进程或线程同步
如何解决?
一个整数n,不允许小于0,小于0就会阻塞程序运行,两个操作来控制: sem_post(3)
每次+1, sem_wait(3)
每次-1。比如初始化时候n=0, 一个线程执行sem_wait()
,发现n是0,如果-1,就会小于0,但信号量不允许小于0,就等着。另一个线程执行sem_post()
,将n+1,此时n==1,sem_wait()
之后,n=0, 操作可以进行,第一个线程就可以继续往后了。
大部分都是参考manual
…
IO多路复用。
1 | #include <stdio.h> |
STDIN_FILENO(0),STDOUT_FILENO(1),STDERR_FILENO(2)
。FILE
是库对文件描述符的封装,子进程可以继承文件描述符,但不继承文件句柄。stdin,stdout,stderr
用宏来实现的,对它们直接赋值不具有可移植性,标准做法是通过freopen(3)
来重新打开。IO事件通知机制。
1 | #include <unistd.h> |
目的
给旧的文件描述符再添一个文件描述符,两个描述符都能指向同一个文件
dup()
: 就给旧的再打开一个文件描述符dup2(oldfd, newfd)
:指定一个新的描述符,新的如果原先有文件,就先关闭dup3(oldfd, newfd, flags)
: 可以指定O_CLOEXEC
标志
…
…
…
…
C++的接口与非侵入式接口 https://zhuanlan.zhihu.com/p/76862132
使用Imp模式避免c++中的改类成员数据导致大规模重新编译 https://blog.csdn.net/killer4747/article/details/81195403
C++ Pimpl惯用法(桥接模式特例) https://www.cnblogs.com/fortunely/p/16391686.html
主要是为了分离接口和实现,如果放在一起,实现变动时,所有引用接口的其他文件都会重新编译一遍
…