我正在尝试使用Hoare的显示器实施证券交易所。使用显示器实施证券交易所
它有两个功能购买()和卖出()如下:
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
}
}
}
这样的方法能够处理多个买卖双方的买卖订单吗?还是会导致死胡同?
在我看来,这段代码可能会导致死锁的情况,因为您在等待之后增加了available_shares变量,所以买方将始终在条件和两者都失败,卖方和买方,永远等待 – 2013-04-29 13:33:49
它最有可能。你知道我该如何解决这个问题吗?或者你能否提出一个不同的实施方案来实施这种证券交易所? – ratsimihah 2013-04-30 13:26:43
@ladypada boost'lockfree' should help,but look out for http://stackoverflow.com/questions/14893246/trouble-with-boostlockfreequeue-in-shared-memory-boost-1-53-gcc-4-7- 2-CL btw:ty教我如何存储和处理订单。 – 2013-05-19 13:22:22