- 博客(11)
- 收藏
- 关注
原创 死锁的条件和避免
https://www.cnblogs.com/bopo/p/9228834.html 1.互斥 2.请求和保持,请求别的资源,自己的又不放 3.不可抢夺,不能被他人抢夺 4.循环等待 解决: 1.原子操作 2.一次分配所有资源 3.申请别的资源前先释放已申请的资源 4.规定资源申请的顺序 ...
2020-05-18 17:37:12 99
转载 Linux中的上下文切换
1.CPU上下文:程序计数器、CPU状态(一些寄存器) 2.进程上下文:虚拟内存、用户堆栈 3.内核上下文:内核堆栈、寄存器 进程切换需要1、2、3 系统调用需要1、3 中断需要1、3 参考: https://segmentfault.com/a/1190000017457234 ...
2020-05-17 10:59:43 226
转载 子进程从父进程继承和不继承的东西
知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为 不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是 这些东西的 拷贝,不是它们本身。 由子进程自父进程继承到: 进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs)) 环境(environment) 堆栈 内存 打开文件的描述符(注意对应的文件的位置由父子进程共享, 这会引起含糊情况) 执行时关闭(close-on-exec) 标志 (译者注:clo
2020-05-16 11:04:19 1111
转载 在构造函数和析构函数抛出异常会发生什么
https://www.cnblogs.com/KevinSong/p/3323372.html 1.析构函数抛异常,会导致未定义行为。若非抛不可,可以用try catch吞下 2.构造函数可以抛异常,但是抛之前先释放资源,另外构造函数抛异常不会调用析构函数 ...
2020-05-15 01:19:27 364
原创 获取结构体内成员的偏移值
1、包含头文件#include <stddef.h>,调用函数offsetof(struct s, i)来实现。 2、使用(int)&(((s*)0)->i)的形式。
2020-05-13 17:04:34 333
原创 父子进程与僵尸进程
情况1:父进程比子进程先结束。 当子进程结束时,检查父进程的状态,得知父进程已结束,则把父进程重置为init,由其帮忙收尸 情况2:子进程先结束 子进程先结束,发现父进程仍在运行,那么就向父进程发送信号SIGCHLD, 对于父进程,有3种策略: 1.选择忽略SIGCHLD,signal(SIGCHLD,SIG_IGN),那么收到信号后自动把子进程过继给init,让其帮忙收尸 2.调用wait给子进程收尸 3.什么也不做,那么子进程一直处于僵尸状态,直到父进程结束,此时把子进程过继给init,让其帮忙收尸。该
2020-05-11 21:29:54 354
原创 关于c++的wait,notify_one,notify_all
一般用法: std::unique_lock<std::mutex> m_lock(m_mutex); if(....){ m_cond.wait(m_lock); } m_lock:获取互斥量(锁); m_cond.wait:释放持有的锁,加入到等待队列中; notify_one:唤醒等待队列中的第一个线程; notify_all:唤醒等待队列中的所有线程; 线程被唤醒后,重新竞争互斥量(锁),得到锁的线程从wait中返回。直到离开m_lock的作用于或重新调用wait,锁才被释放。 需
2020-05-10 01:35:31 2929
原创 不要对监听的socket指定EPOLLONESHOT参数
EPOLLONESHOT:注册事件后,只触发一次,需要重新调用epoll_ctl才能继续触发。
2020-05-07 16:55:30 134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人