我正在嘗試使用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