【发布时间】:2012-09-04 18:04:08
【问题描述】:
我正在尝试构建一个实时匹配用户的系统。根据特定标准,用户的匹配是 1 对 1。我有以下数据库表(有点像聊天轮盘赌类型系统):
Pool
+UserId
+Gender
+City
+Solo (bool)
Matched
+UserId
+PartnerId
当用户进入某个页面时,他们被添加到Pool 表中,Solo 设置为 true。然后系统通过查询Pool 表来搜索另一个用户,并返回Solo 为真(意味着他们没有合作伙伴)并且Gender 和City 也等于他们查询的结果的结果。如果返回匹配项,则将两个用户都放入Matched 数据库,并将Pool 表中的Solo 列都转换为false。如果它们断开连接,它们将从Matched 表中删除,它们的Solo 列将更改为true。我在尝试构建线程安全和并发的方式时遇到了麻烦。以下是我遇到的一些问题:
-如果两个用户同时查询Pool 数据库并且都返回相同的“solo”用户怎么办?如何防止这种情况发生?
-如果有 1 个用户在用户的 solo 列更改之前查询了 Pool,那么现在该用户在结果集中返回,但从技术上讲,他不是单独的
-我还面临哪些其他并发/线程安全问题?还有比这更好的方法吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc-3 entity-framework thread-safety