缺少线程安全会导致什么样的崩溃? (对Under what circumstances are atomic properties useful?的后续行动进行排序。)
任何人都可以使用测试用例重现崩溃示例(即使是零星的)吗?
我试图从大量崩溃日志中挑选出多少百分比与从多个线程访问的特定整数变量相关。 (是的,我已经确认此访问可以在我的iOS应用中发生,问题是发生的频率。)
显然,不正确的变量访问会导致意外的影响,并且下游会出现更多崩溃,但我只对直接与变量的访问/变异相关的那些感兴趣(因为下游影响通常是相同的从一个应用程序到另一个应用程此外,只对整数(或其他完全不可变的)变量感兴趣。
我正在寻找任何示例错误代码/例外/崩溃日志,我可以从中提取关键字和正则表达式。更好的是测试应用程序或单元测试用例,可以高概率地重现崩溃。我在单元测试中尝试了一个简单的例子,但似乎不会导致崩溃。
答案 0 :(得分:1)
虽然这种方法听起来如此合乎逻辑,但竞争条件以多种方式表现出来,并且无法在崩溃日志中进行简单的表征。数据竞赛引起的问题尤其令人烦恼,因为它们通常导致heisenbugs。有时它甚至不会崩溃,而只是产生不正确的结果(可能会或可能不会导致其他问题)。
我知道这不是您正在寻找的答案,但是虽然我可以看到您的计划的吸引力,但它不太可能是一项富有成效的练习。
如果这是一个优先考虑线程安全修复与其他问题的问题,那么没有简单的答案。在解决此数据争用问题之前,该应用程序将容易受到崩溃和其他不可预测的行为的影响。但我们无法可靠地预测当前崩溃日志的百分比将被解决。恕我直言,鉴于崩溃是失去用户群的最快方式,这个线程安全修复对我来说是一个非常高的优先级。
在识别非同步访问方面,thread sanitizer中概述的this WWDC video是一个很好的工具。