川川的博客

Thinking will not overcome fear but action will.

C++avltree

AVLTree 规定平衡因子 = 右子树高度 - 左子树高度 更新平衡因子 平衡因子>1或<-1,需要旋转调整 bool insert(const K& key) { if (_root == nullptr) { _root->_data = key; return true; } Node* cur = _r...

Linux11信号

信号 不同信号用不同的整数标识 信号是一种软件层面的异步事件机制 信号产生的时机 信号产生会修改目标进程的task_struct 信号递送行为 传入信号值参数 阻塞和未决 让产生的信号不能马上递送,而是处于未决状态 已产生但未递送的信号 原理: 不同信号的阻塞 低速系统调用 在信号递送完成之后,会...

C++map&set

map和set 序列式容器:vector/list/string/deque 关联式容器:map/set/unordered_map/unordered_set map map[]的重载 multimap和multiset 与set和map的区别是可以出现重复的元素 multimap没有operator[],因为当有多个key时不知道返回哪个value ...

Linux10信号量&消息队列

信号量 硬件上互斥 semget创建信号量,如果不是IPC_PRIVATE私有方式,多个进程传入同一个key,不能修改信号量大小 二元信号量 实现PV操作 P操作是一个原子操作(原语),信号量值的测试和减一操作 更高精度的时间统计 计数信号量 SETALL GETALL 生产者消费者 注意:判断条件需要放到P V操作中,才...

Linux09管道&共享内存

管道/共享内存 pipe 系统调用 参数是一个长度为2的int数组 先pipe再fork 管道的例子 (无名管道) 有名管道 mkfifo 创建有名管道 unlink 删除管道文件 rename 修改文件名字 link 创建新的硬链接 共享内存 让不同进程虚拟内存页对应同一物理内存的页框 库文件经常使用共享内存 System...

Linux08进程相关命令

在代码中启动多个进程 库函数 system调用过程 system("./sleep"); 系统调用 fork 父进程 fork()返回子进程pid 子进程 fork()返回0 pid_t pid; pid = fork(); if(pid == 0){ printf("I am child,pid=%d,ppid=%d",getpid(),getppid()...

C++二叉树进阶

二叉树进阶 二叉搜索树 树的本身和子树都满足左孩子比它小,右孩子比他大。 使用价值: 搜索,最多查找树的高度次 排序,中序遍历是有序的 ​ bool insert(const K& key); void _InOrder(Node* root); void InOrder(); bool Find(const K& key); bool E...

Linux07进程

进程 正在运行的程序,动态的 OS资源分配的基本单位,创建一个进程就可以利用计算机cpu和内存 每个进程都独享一块虚拟cpu和虚拟内存 任务队列 双向循环链表 task_struct结点 进程标识符PID和PCB一一对应 passwd实现原理 SUID X X ps -elf top fork() 父子共享文件对象读写位置 execl() 孤儿进程 僵尸进程 ...

Linux06文件对象&io多路复用

文件对象 不带缓冲的文件IO (系统调用) open() file struct fileno(fd) read() write() 磁盘文件和设备文件 lseek() ftruncate() mmap() dup() open(path,flags,mode_t) open(path,flags)文件存在就不用设定权限 返回文件描述符int ...

C++多态

多态 virtual关键字 可以修饰成员函数,为了完成虚函数重写,满足多态条件之一。 可以在菱形继承中,去完成虚继承,解决数据冗余和二义性。 多态两个条件: 虚函数的重写 父类对象的指针或者引用去调用虚函数 多态:跟调用对象的类型无关,指向哪个对象就调用它的虚函数 虚函数重写 派生类虚函数与基类虚函数的返回值类 型、函数名...