Add NSLock to protect lazily loaded tables in multithread concurrent setting

This commit is contained in:
Peter Tang
2024-10-26 22:20:25 +08:00
parent 55b539b74e
commit 25938db765
2 changed files with 49 additions and 24 deletions

View File

@@ -47,14 +47,14 @@ final class MTFontMathTableV2Tests: XCTestCase {
func helperConcurrentMTFontMathTableV2(_ count: Int, mtfont: MTFontV2, in group: DispatchGroup, on queue: DispatchQueue) {
let workitem = DispatchWorkItem {
let mTable = mtfont.mathTable
// let values = [
// mTable?.fractionNumeratorDisplayStyleShiftUp,
// mTable?.fractionNumeratorShiftUp,
// mTable?.fractionDenominatorDisplayStyleShiftDown,
// mTable?.fractionDenominatorShiftDown,
// mTable?.fractionNumeratorDisplayStyleGapMin,
// mTable?.fractionNumeratorGapMin,
// ].compactMap{$0}
let values = [
mTable?.fractionNumeratorDisplayStyleShiftUp,
mTable?.fractionNumeratorShiftUp,
mTable?.fractionDenominatorDisplayStyleShiftDown,
mTable?.fractionDenominatorShiftDown,
mTable?.fractionNumeratorDisplayStyleGapMin,
mTable?.fractionNumeratorGapMin,
].compactMap{$0}
// if count % 50 == 0 {
// print(values) // accessed these values on global thread.
// }
@@ -62,16 +62,16 @@ final class MTFontMathTableV2Tests: XCTestCase {
}
workitem.notify(queue: .main) { [weak self] in
// print("\(Thread.isMainThread ? "main" : "global") completed .....")
// let mTable = mtfont.mathTable
let mTable = mtfont.mathTable
if count % 70 == 0 {
// let values = [
// mTable?.fractionNumeratorDisplayStyleShiftUp,
// mTable?.fractionNumeratorShiftUp,
// mTable?.fractionDenominatorDisplayStyleShiftDown,
// mTable?.fractionDenominatorShiftDown,
// mTable?.fractionNumeratorDisplayStyleGapMin,
// mTable?.fractionNumeratorGapMin,
// ].compactMap{$0}
let values = [
mTable?.fractionNumeratorDisplayStyleShiftUp,
mTable?.fractionNumeratorShiftUp,
mTable?.fractionDenominatorDisplayStyleShiftDown,
mTable?.fractionDenominatorShiftDown,
mTable?.fractionNumeratorDisplayStyleGapMin,
mTable?.fractionNumeratorGapMin,
].compactMap{$0}
// if count % 50 == 0 {
// print(values)
// }