标签 缓冲区 下的文章

IntelliJ IDEA For Mac 快捷键

根据官方pdf翻译:
https://resources.jetbrains.com/assets/products/intellij-idea/IntelliJIDEA_ReferenceCard_Mac.pdf

建议将 Mac 系统中与 IntelliJ IDEA 冲突的快捷键取消或更改,不建议改 IntelliJ IDEA 的默认快捷键。

Mac键盘符号和修饰键说明

⌘ Command
⇧ Shift
⌥ Option
⌃ Control
↩︎ Return/Enter
⌫ Delete
⌦ 向前删除键(Fn+Delete)
↑ 上箭头
↓ 下箭头
← 左箭头
→ 右箭头
⇞ Page Up(Fn+↑)
⇟ Page Down(Fn+↓)
Home Fn + ←
End Fn + →
⇥ 右制表符(Tab键)
⇤ 左制表符(Shift+Tab)
⎋ Escape (Esc)

- 阅读剩余部分 -

操作系统基础知识(三)--生产者消费者模型

生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题,主要解决的是两者速率不一致而产生的阻抗不匹配。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
一、PV原语
1.一个生产者,一个消费者,一个缓冲区。

问题关键:只有生产了产品,消费者才能消费(同步)

其中包含的有2个同步条件:

只有当缓冲区是空的情况下,生产者才能往缓冲区写数据
只有当缓冲区是满的情况下,消费者才能往缓冲区读数据
所以要定义2个同步信号量: empty--表示缓冲区是否为空,初值为1.
full--表示缓冲区中是否为满,初值为0

生产者进程

while(true){
   produce();
   P(empty);
   toBuffer();
   V(full);
}

消费者进程

while(true){
    P(full);
    getBuffer();
    V(empty);
    consume();
}

2.一个生产者,一个消费者,N个环形缓冲区

定义2个同步信号量:
empty--表示缓冲区是否为空,初值为n
full--表示缓冲区是否为满,初值为0
设缓冲区的编号为1~n-1,定义2个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。

生产者进程

while(true){
  produce();
  P(empty);
  toBuffer(in);
  in = (in + 1) mod n;
  V(full);
}

消费者进程

while(true){
  P(full);
  getBuffer(out);
  out=(out+1) mode n;
  V(empty);
  consume();
}

3.一组生产者,一组消费者,N个环形缓冲区

问题关键:生产者生产了产品,消费者才能消费;生产者之间不能往同一个缓冲区写数据;消费者也不能从同一个缓冲区读数据;

同步关系

只有当缓冲区是空的情况下,生产者才能往缓冲区写数据
只有当缓冲区是满的情况下,消费者才能往缓冲区读数据
互斥关系:

生产者往一个缓冲区写数据了,另外一个生产者不能往该缓冲区写数据
消费者往一个缓冲区读数据了,另外一个生产者不能往该缓冲区读数据
所以定义4个信号量:(几种关系,几个信号量)

empty--表示缓冲区是否为空,初值为N
full--表示缓冲区是否为满,初值为0
mutex1--生产者之间的互斥信号量,初值为1
mutex2--消费者之间的互斥信号量,初值为1
该缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针

生产者进程

while(true){
  produce();
  P(empty);
  P(mutex1);
  tobuffer(in);
  in = (in + 1) mod n;
  V(mutex1);
  V(full);
}

消费者进程

while(true){
  P(full);
  P(mutex2);
  getBuffer(out);
  out = (out + 1) mod n;
  V(mutex2);
  V(empty);
}

实际上互斥还是同步,虽然有以上2种方式实现,但其根本还是原语的原子性。

bst g22 jinniu lilai opebet orange88 vinbet xbet yuebo zunlong shijiebei bet007 hg0088 ju111 letiantang m88 mayaba qg777 qianyiguoji sbf777 tengbohui tlc ule weilianxier waiweitouzhu xingfayule xinhaotiandi yinheyule youfayule zhongying 2018shijiebei w88 18luck 188bet beplay manbet 12bet 95zz shenbo weide1946 ca88 88bifa aomenxinpujing betway bodog bt365 bwin tongbao vwin weinisiren 88jt fenghuangyule hongyunguoji 918botiantang huanyayule jianada28 jixiangfang libo long8 hongzuyishi zuqiutouzhu