我正在尝试使用 Hoare 的监视器实现证券交易所。
它有两个函数 buy() 和 sell() 如下:
buy(procid, ticker, nshares, limit)
sell(procid, ticker, nshares, limit)
并且应该打印有关买方 ID、卖方 ID、股票代码、股票数量和价格的信息。公平总是得到满足。
我的解决方案的伪代码如下,但并不完整。它基本上为每个代码使用条件变量队列。当向证券交易所发送卖单时,卖方进程在此队列中进入休眠状态,并且买方进程向该卖方进程发出信号,如果条件(匹配价格限制和股票数量)满足,它想要购买。
monitor SE {
int available_shares;
int price;
sell(procid, ticker, nshares, limit) {
wait(ticker); // put sell order in ticker queue
available_shares += nshares;
price = limit;
printf("Starting transaction with seller %i", procid);
}
buy(procid, ticker, nshares, limit) {
if (limit <= price && nshares <= available_shares) {
signal(ticker);
available_share -= nshares;
printf("Completing transaction with buyer %i", procid);
printf("Transacting %i %s shares at %i", nshares, ticker, limit);
} else {
wait(ticker); // put buy order in ticker queue
}
}
}
这种方法是否能够处理多个代码的多个买卖订单?还是会导致死胡同?