gpt4 book ai didi

ios - IOS Swift 中的多线程

转载 作者:行者123 更新时间:2023-11-28 09:30:12 26 4
gpt4 key购买 nike

我正在尝试并行运行两个线程。但不幸的是,它有时有效有时无效。这是我的代码

 let firstQueue = DispatchQueue(label: "queue1", qos: DispatchQoS.userInitiated)
let secondQueue = DispatchQueue(label: "queue2", qos: DispatchQoS.userInitiated)
//let firstQueue = DispatchQueue(label: "queue1", qos: DispatchQoS.default , attributes: .concurrent)

firstQueue.async {
for i in 0..<10 {
print("🔷", i)
}
}


secondQueue.async {
for i in 20..<30 {
print("⚪️", i)
}
}

我尝试了所有不同的方法,但没有达到完美的并行性。第一次输出:0
⚪️ 20
🔷 1
⚪️ 21
🔷 2
⚪️ 22
🔷 3
⚪️ 23
🔷 4
⚪️ 24
🔷 5
⚪️ 25
🔷 6
⚪️ 26
🔷 7
⚪️ 27
🔷 8
⚪️ 28
🔷 9
⚪️ 29

第二次输出:

🔷 0🔷 1🔷 2🔷 3🔷 4🔷 5🔷 6🔷 7🔷 8🔷 9⚪️ 20⚪️ 21⚪️ 22⚪️ 23⚪️ 24⚪️ 25⚪️ 26⚪️ 27⚪️ 28⚪️ 29

最佳答案

多线程的要点是操作将并行进行并且彼此独立。那根本不保证任何顺序,没有同步,什么都没有。如果您需要同步事物,那么您将需要使用单个线程或使用第三个线程来分派(dispatch)工作:

func foo() {
let firstQueue = DispatchQueue(label: "queue1")
let secondQueue = DispatchQueue(label: "queue2")

let mainQueue = DispatchQueue(label: "queueMain")

var firstQueueOperationsCount: Int = 10
var secondQueueOperationsCount: Int = 10

func performOperations() {
guard max(firstQueueOperationsCount, secondQueueOperationsCount) > 0 else {
return
}
mainQueue.async {
if firstQueueOperationsCount > secondQueueOperationsCount {
firstQueueOperationsCount -= 1
firstQueue.async {
print("🔷")
performOperations()
}
} else {
secondQueueOperationsCount -= 1
secondQueue.async {
print("⚪️")
performOperations()
}
}
}
}

performOperations()
}

关于如何序列化在多个线程上分派(dispatch)的任务有很多方法,这只是其中之一。您可以尝试朝那个方向搜索/阅读,但要清楚:您似乎对多线程的期望并不是多线程是什么。它不能这样工作,也不应该这样工作。他们如何工作就是我们希望它如何工作。

如果您有更具体的情况,我相信这里的社区可以帮助您找到解决问题的好方法。但是从你所写的结果来看,结果不是多线程而是:

for i in 0..<10 {
print("🔷")
print("⚪️")
}

它可能会在另一个线程上分派(dispatch),但这真的没有什么区别。

关于ios - IOS Swift 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50038649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com