操作系统
princeteng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode146——LRU 缓存机制
1.数据结构为了满足O(1)的复杂度,需要哈希表。另外还需要双向链表存放(key,value).哈希表中存放(key, key在链表中的位置)。2.算法2.1 get操作if key不存在: 直接返回-1else 在原链表中删除(key,value) 将(key,value)重新放回链表的头部 更新哈希表 返回value2.2 put操作if key存在: 在原链...原创 2020-02-25 17:18:24 · 240 阅读 · 0 评论 -
APUE:第十一章——线程
11.2 概念11.3 线程标识进程ID使用pid_t标识,线程ID使用pthread_t表示。进程ID在整个系统中是唯一的,线程ID只在其所属的进程中有效。线程ID用pthread_t数据类型表示,实现的时候可以使用结构体实现,也可以使用无符号长整型表示。通过函数pthread_equal函数可以比较两个线程ID是否相同。#include <pthread.h>in...原创 2020-01-13 11:22:42 · 241 阅读 · 0 评论 -
C++多线程——读写锁shared_lock/shared_mutex
主要参考APUE以及std::shared_mutex1. 何为读写锁相比互斥锁,读写锁允许更高的并行性,互斥量要么锁住状态要么不加锁,而且一次只有一个线程可以加锁。读写锁可以有三种状态:读模式加锁状态;写模式加锁状态;不加锁状态;只有一个线程可以占有写模式的读写锁,但是可以有多个线程占有读模式的读写锁。读写锁也叫做“共享-独占锁”,当读写锁以读模式锁住时,它是以共享模式锁住的...原创 2020-01-13 11:19:49 · 33326 阅读 · 8 评论 -
C++多线程——条件变量condition_variable
基本翻译std::condition_variable-cplusplus加参考std::condition_variable-cppreference其他博客。1.condition_variable概述condition_variable 类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知 condition_variable 。当其wait f...原创 2020-01-12 20:05:26 · 1210 阅读 · 0 评论 -
C++多线程——unique_lock
基本上是对std::unique_lock的翻译。unique_lock比lock_guard更加灵活,不单单是通过控制对象的构造与析构来实现lock和unlock,因为其有lock和unlock的成员函数,而lock_guard只有构造和析构函数。1.unique_lock概述一个unique_lock对象用来管理mutex对象。在构造(或者移动构造)时, unique_lock对象获得...原创 2020-01-12 12:07:14 · 1725 阅读 · 0 评论 -
C++多线程——原子操作atomic
原子操作示例原子操作 是个不可分割的操作。 在系统的所有线程中,你是不可能观察到原子操作完成了一半这种情况的; 它要么就是做了,要么就是没做,只有这两种可能。不使用原子操作:#include <iostream>#include <thread>#include <atomic>using namespace std;long num = ...原创 2020-01-11 20:25:18 · 3267 阅读 · 0 评论 -
C++多线程——互斥量
并发的优点分离关注点通过将相关的代码与无关的代码分离,可以使程序更容易理解和测试,从而减少出错的可能性更好的性能将一个单个任务分成几部分,且各自并行运行,从而降低总运行时间。这就是任务并行(task parallelism)。为性能而使用并发就像所有其他优化策略一样:它拥有大幅度提高应用性能的潜力,但它也可能使代码复杂化,使其更难理解,并更容易出错。并发的缺点线程是有限...原创 2020-01-11 11:18:02 · 3041 阅读 · 0 评论 -
死锁、死锁避免、银行家算法
1.概念实例:进程访问资源的流程:2.建模两类顶点:进程(圆形表示)和资源(方形表示);使用有向边表示资源与进程之间的关系:由进程指向资源的边表示进程申请资源;由资源指向进程的边表示资源被进程占用。3.死锁的产生条件下面四个条件必须同时满足才可能出现死锁:2)占有和等待条件是说已经占有一个资源的进程还需要等待其他资源才能完成。举例:右侧的图形虽然有环,但是不...原创 2019-12-15 17:35:22 · 1651 阅读 · 1 评论 -
操作系统之——为Linux0.11添加系统调用
1.目标为Linux0.11添加两个系统调用, 分别为:int iam(const char* name);功能为:将字符串name拷贝到内核并保存,要求 name 的长度不能超过 23 个字符。返回值是拷贝的字符数。如果 name 的字符个数超过了 23,则返回 “-1”,并置 errno 为 EINVAL。在 kernal/who.c 中实现此系统调用。int whoami(cha...原创 2019-12-10 11:35:00 · 2298 阅读 · 1 评论
分享