Hoare のモニターを使用して証券取引所を実装しようとしています。
次のように、buy() と Sell() の 2 つの関数があります。
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
}
}
}
このようなアプローチは、複数のティッカーの複数の売買注文を処理できるでしょうか? それとも行き止まりにつながりますか?