L-Zephyr / Drafter

在iOS项目中自动生成类图和方法调用图 - Generate call graph in iOS project
MIT License
1.02k stars 127 forks source link

ParserRunner中parse方法并发写入results是否存在线程不安全的问题? #10

Closed tom555cat closed 6 years ago

tom555cat commented 6 years ago

`var results: [FileParserResult] = []

    // 1. 解析OC文件
    for file in ocFiles {
        print("Parsing: \(file.lastComponent)")
        semaphore.wait()
        DispatchQueue.global().async {
            if let result = FileParser(file).run(usingCache) {
                results.append(result)
            }
            self.semaphore.signal()
        }
    }`

DispatchQueue.global()中的任务是并发执行,同时解析4个文件,在results.append(result)中是否会存在线程安全问题?

L-Zephyr commented 6 years ago

确实存在这个问题,多谢提醒