首页 > 解决方案 > 证明线程锁定机制可以防止数据竞争

问题描述

在阅读了 Matt Gallager 的Mutexes andclosure capture in Swift之后,我决定尝试重写我的 Swift 项目中的一些类,这些类在内部同步对其成员的访问。然而,在尝试这样做之前,我注意到我当前的内部同步缺少一些东西:证明数据竞争是否真的被阻止的测试。

直观地说,锁“应该可以工作”,而且我的程序在运行了数百次之后还没有产生任何数据竞争(这表明它至少大部分都可以工作)。但是对于多线程,直觉并不总是那么远,而且并非每个边缘情况都可以在正常情况下被捕获。

Sean Barry 关于编写单元测试以模拟竞态条件的文章虽然有助于测试竞态条件的影响,但不适用,因为我担心测试数据完整性(因为竞态条件与数据竞态不同并且不需要总是一起出现) - 不是数据是否以正确的顺序访问(当然,竞争条件可能会导致最后设置错误的数据,但至少有一些清晰的东西会在那里和/或它会在那里没有由于同时写入而崩溃)

如何证明我的代码可以防止数据竞争?

注意: Swift 的引入actor将保证我的代码是无数据竞争的(尽管不是无竞争条件的),并且我的类可能会变成演员;但是由于这个问题可以被认为是与语言无关的,所以知道如何证明数据竞争被阻止仍然是一件好事。

标签: swiftmultithreadingtestingconcurrency

解决方案


推荐阅读