操作系统笔记——生产者-消费者问题

一、问题描述

1.有两个进程,生产者进程和消费者进程

2.临界资源:缓冲池

3.关系:只要缓冲池不满,生产者进程就可以向缓冲池中存入信息;只要缓冲池不空,消费者就可以从缓冲池中拿走信息。缓冲池同时只能被一共进程占用。

二、互斥问题

1.缓冲池中的缓冲区有N个。

2.信号量设置

(1)互斥信号量mutex,这个信号量用于标注缓冲池是否被占用

互斥信号量的设置,要看有哪几种互斥就设置几个。比如若是允许生产者写的时候,消费者读,互斥的关系就是:生产者和生产者互斥写入缓存区;消费者和消费者互斥读缓冲区;生产者和消费者之间就没有互斥关系了,故一共有两种互斥关系,设置两个互斥信号量。

(2)信号量full:表示满缓冲区的个数

(3)信号量empty:表示空缓冲区的个数

三、算法描述(PASCAL)

1.标准生产者-消费者问题描述:

VAR  
         mutex,empty.full:semaphore :=1,n,0;
         in,out: integer := 0, 0 ;
         Buffer: array [0..n-1] of item ;
Parbegin
    Producer:  
    begin 
            repeat 
                produce an item in nextp ;

                wait(empty);    
   
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这篇文章中,我们将对 NJ4X 的 TypeScript 版本进行初步分析。首先,我们需要知道 NJ4X 是什么。NJ4X 是一个 MetaTrader 4(MT4)的 Java 接口,它允许使用 Java 或 C# 编写的策略与 MT4 进行通信。NJ4X-ts 是 NJ4X 的 TypeScript 版本,它允许使用 TypeScript 编写的策略与 MT4 进行通信。 在 NJ4X-ts 中,有一个核心类 NJ4XClient,它实现了与 MT4 服务器进行通信的功能。NJ4XClient 类中有一个属性 socket,它是一个 WebSocket 对象,用于与 MT4 服务器进行通信。NJ4XClient 类中也有一些方法,用于发送命令并处理服务器的响应。这些方法包括: - sendCommand(command: string): Promise<any>:发送命令并返回一个 Promise 对象,该对象会在接收到服务器响应后被解析。 - sendCommandWithTimeout(command: string, timeout: number): Promise<any>:与 sendCommand 方法类似,但它还接受一个超时时间参数,如果在超时时间内未收到服务器响应,则 Promise 对象会被拒绝。 - readResponse(): Promise<any>:读取服务器响应并返回一个 Promise 对象,该对象会在响应被解析后被解析。 在 NJ4X-ts 中,还有一些辅助类和函数,用于解析服务器响应和生成命令。这些类和函数包括: - NJ4XResponse:表示从服务器接收到的响应,它包含响应的状态码、错误信息和数据。 - NJ4XCommand:表示要发送到服务器的命令,它包含命令字符串和一个可选的参数对象。 - parseResponse(response: string): NJ4XResponse:将服务器响应字符串解析为 NJ4XResponse 对象。 - buildCommandString(command: string, params?: object): string:将命令字符串和参数对象转换为命令字符串。 这些类和函数的实现可以在 NJ4X-ts 的源代码中找到。 在下一篇文章中,我们将继续分析 NJ4X-ts 的源代码,了解更多关于 NJ4X-ts 的实现细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值