• R/O
  • SSH
  • HTTPS

etudemobileapps: Commit


Commit MetaInfo

Revision381 (tree)
Time2014-09-08 14:29:09
Authoriga

Log Message

排他を実装。

Change Summary

Incremental Difference

--- trunk/EtudeOp3/src/cpp/LocalStockManagerUnit.h (revision 380)
+++ trunk/EtudeOp3/src/cpp/LocalStockManagerUnit.h (revision 381)
@@ -26,6 +26,7 @@
2626 private:
2727 int stocks[6];
2828 int prices[6];
29+ TObject *global_lock;
2930
3031 public:
3132 /*
--- trunk/EtudeOp3/src/cpp/LocalStockManagerUnit.cpp (revision 380)
+++ trunk/EtudeOp3/src/cpp/LocalStockManagerUnit.cpp (revision 381)
@@ -31,6 +31,8 @@
3131 * 注意: 価格については、現状はソースコードにハードコードされたものを利用しています。
3232 */
3333 TLocalStockManager::TLocalStockManager() {
34+ global_lock = new TObject();
35+
3436 for (int i = 0; i < 6; i++) {
3537 stocks[i] = 8;
3638 }
@@ -55,8 +57,14 @@
5557 return -1;
5658 }
5759
58- // 価格については、現状はソースコードにハードコードされたものを利用しています。
59- return prices[ID];
60+ System::MonitorEnter(global_lock);
61+ try {
62+ // 価格については、現状はソースコードにハードコードされたものを利用しています。
63+ return prices[ID];
64+ }
65+ __finally {
66+ System::MonitorExit(global_lock);
67+ }
6068 }
6169
6270 /*
@@ -70,8 +78,14 @@
7078 return -1;
7179 }
7280
73- // TODO 在庫管理をネットワーク対応させるためには、ここを変更します。
74- return stocks[ID];
81+ System::MonitorEnter(global_lock);
82+ try {
83+ // TODO 在庫管理をネットワーク対応させるためには、ここを変更します。
84+ return stocks[ID];
85+ }
86+ __finally {
87+ System::MonitorExit(global_lock);
88+ }
7589 }
7690
7791 /*
@@ -85,13 +99,19 @@
8599 return false;
86100 }
87101
88- // TODO 在庫管理をネットワーク対応させるためには、ここを変更します。
89- if (stocks[ID] > 0) {
90- stocks[ID]--;
91- return true;
102+ System::MonitorEnter(global_lock);
103+ try {
104+ // TODO 在庫管理をネットワーク対応させるためには、ここを変更します。
105+ if (stocks[ID] > 0) {
106+ stocks[ID]--;
107+ return true;
108+ }
109+ else {
110+ return false;
111+ }
92112 }
93- else {
94- return false;
113+ __finally {
114+ System::MonitorExit(global_lock);
95115 }
96116 }
97117
Show on old repository browser