- 博客(11)
- 收藏
- 关注
原创 死锁的条件和避免
https://www.cnblogs.com/bopo/p/9228834.html1.互斥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.html1.析构函数抛异常,会导致未定义行为。若非抛不可,可以用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 2926
原创 不要对监听的socket指定EPOLLONESHOT参数
EPOLLONESHOT:注册事件后,只触发一次,需要重新调用epoll_ctl才能继续触发。
2020-05-07 16:55:30 134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人