# 并发问题：同一主题的两种解决方案

**URL:** <https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104>\
**Category:** Bug\
**Created:** [2020年八月17日 08:01 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104 "2020-08-17T08:01:08Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![nikod](https://avatars.discourse-cdn.com/v4/letter/n/46a35a/32.png) [@nikod](https://meta.discourse.org/u/nikod)\
**Post date:** [2020年八月17日 08:01 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/1 "2020-08-17T08:01:08Z")

</div>

当两名成员同时点击“接受解决方案”按钮时，一个主题可能会获得两个解决方案。

---

<div class="post-metadata">

**Author:** ![osioke](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osioke/32/238946_2.png) [@osioke](https://meta.discourse.org/u/osioke)\
**Post date:** [2020年八月17日 10:14 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/2 "2020-08-17T10:14:48Z")

</div>

你好 @nikod，好久不见 🙂

你能分享一段屏幕录制视频，或者提供详细的复现步骤吗？

---

<div class="post-metadata">

**Author:** ![nikod](https://avatars.discourse-cdn.com/v4/letter/n/46a35a/32.png) [@nikod](https://meta.discourse.org/u/nikod)\
**Post date:** [2020年八月17日 10:20 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/3 "2020-08-17T10:20:31Z")

</div>

复现步骤：

- 在两个浏览器中打开同一主题，并分别以两个不同的用户身份登录。
- 在两个窗口中尽可能快地点击不同帖子的“接受解决方案”按钮。

---

<div class="post-metadata">

**Author:** ![osioke](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osioke/32/238946_2.png) [@osioke](https://meta.discourse.org/u/osioke)\
**Post date:** [2020年八月17日 10:22 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/5 "2020-08-17T10:22:51Z")

</div>

好的。听起来这需要做很多工作，发生的可能性很低，但确实存在。你能这样做并录制屏幕以帮助我们确认吗？

---

<div class="post-metadata">

**Author:** ![nikod](https://avatars.discourse-cdn.com/v4/letter/n/46a35a/32.png) [@nikod](https://meta.discourse.org/u/nikod)\
**Post date:** [2020年八月17日 11:18 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/6 "2020-08-17T11:18:42Z")

</div>

我需要与一位朋友同步点击操作，我们尝试了四次才成功复现……因此我没有录屏，只有结果截图：

 ![grafik](https://global.discourse-cdn.com/meta/original/3X/d/0/d09ac21185ed11dd87f9f0fd23a9a033365d2b67.png)

复现步骤：

- 让两个人分别以两个不同的用户身份登录并打开同一个主题。
- 该主题此前尚未有任何解决方案被接受。
- 同步（例如倒数）点击两个不同帖子的“接受解决方案”按钮。
- 刷新页面以查看实际结果。
- 在某种“运气”下，会有两个解决方案被同时接受。

我不确定是否可以使用同一账户复现此问题，也不确定如果已有解决方案被接受后是否还能复现。

另外，非常抱歉，我们当前运行的是 v2.4.0.beta2 +123 版本。一旦我有时间进行更新，我会再次尝试复现该问题。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2020年八月17日 12:25 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/8 "2020-08-17T12:25:00Z")

</div>

这真的在自然环境中发生过，还是只有在你非常、非常努力尝试时才会发生？

---

<div class="post-metadata">

**Author:** ![nikod](https://avatars.discourse-cdn.com/v4/letter/n/46a35a/32.png) [@nikod](https://meta.discourse.org/u/nikod)\
**Post date:** [2020年八月17日 13:04 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/9 "2020-08-17T13:04:08Z")

</div>

> [@pfaffman](#):
>
> 这真的在现实中发生过吗？

确实如此。(0123456789)

---

<div class="post-metadata">

**Author:** ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)\
**Post date:** [2020年八月17日 14:35 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/10 "2020-08-17T14:35:32Z")

</div>

已添加互斥锁，应可解决并发问题

> <https://github.com/discourse/discourse-solved/commit/9ecac7a3e25de655f34657748da23ec1b6f107ed>
>
> To prevent any race conditions when two users toggle the state of a reply.
> 
> (cf.… https://meta.discourse.org/161104)

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2020年八月17日 15:25 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/11 "2020-08-17T15:25:22Z")

</div>

这侦探工作做得真棒！

---

<div class="post-metadata">

**Author:** ![nikod](https://avatars.discourse-cdn.com/v4/letter/n/46a35a/32.png) [@nikod](https://meta.discourse.org/u/nikod)\
**Post date:** [2020年八月17日 17:55 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/12 "2020-08-17T17:55:55Z")

</div>

而且修复得真快！谢谢！👍

---

<div class="post-metadata">

**Author:** ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)\
**Post date:** [2020年八月18日 16:00 UTC](https://meta.discourse.org/t/concurrency-problem-two-solutions-for-the-same-topic/161104/13 "2020-08-18T16:00:09Z")

</div>

此主题已在 25 小时后自动关闭。不再允许新的回复。
