jcstress 能把「理论上可能」的并发结果真的跑出来。这篇写了 7 个经典测试(Store Buffering、Message Passing、丢失更新、long 撕裂),看哪些结果在本机上实际出现,哪些加上 volatile / release-acquire / 原子类之后消失。
总耗时 48 秒;CPU 个数:10;jcstress 头部信息: ['Hardware CPUs in use: 10', 'Forks per test: 1 normal, 1 stress', 'Compilation: split', '(CPUs: 10 configured, 9 allocated)', 'Compilation: split', '(CPUs: 10 configured, 9 allocated)'] [SbPlain] 状态 OK;(0, 0) 24,354,555 Interesting (0, 1) 9,131,854 Acceptable (1, 0) 7,553,455 Acceptable (1, 1) 27 Acceptable [SbVolatile] 状态 OK;(0, 0) 0 Forbidden (0, 1) 9,078,836 Acceptable (1, 0) 8,305,555 Acceptable (1, 1) 1,100 Acceptable [MpPlain] 状态 OK;(0, 0) 26,152,399 Acceptable (0, 1) 6,008 Acceptable (1, 0) 1,723 Interesting (1, 1) 26,092,561 Acceptable [MpRelAcq] 状态 OK;(0, 0) 7,889,419 Acceptable (0, 1) 2,504 Acceptable (1, 0) 0 Forbidden (1, 1) 8,561,728 Acceptable [LostUpdatePlain] 状态 OK;(1) 28,385,172 Interesting (2) 45,258,879 Acceptable [LostUpdateAtomic] 状态 OK;(1) 0 Forbidden (2) 13,811,731 Acceptable [LongTear] 状态 OK;(-1) 179,884 Acceptable (0) 8,204,647 Acceptable