gpt4 book ai didi

swift - 这是否是快速进行竞争条件的正确方法?

转载 作者:行者123 更新时间:2023-11-30 10:04:05 25 4
gpt4 key购买 nike

想要尝试创建简单的竞争条件并使用dispatch_barrier来解决它。

A 对此犹豫不决,因为该值通常在 1000 左右,但我认为应该更大,就像我在 YouTube 视频上看到的那样。

 class A {
var someValue = 0

func increaseValueBy1000() {
for _ in 0..<1000 {
let v = self.someValue + 1
print(v)
self.someValue = v
}
}
}


let instance1 = A()



dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
instance1.increaseValueBy1000()
}


instance1.increaseValueBy1000()

这是否是正确的竞争条件示例?

最佳答案

这是一个竞争条件演示:

import Foundation

var x = 0

func setX(y: Int) {
x = y
}

let sema = dispatch_semaphore_create(1)
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)

let q = dispatch_queue_create("demo.race-condition", DISPATCH_QUEUE_CONCURRENT)
dispatch_suspend(q)

// Schedule a number of concurrent tasks
for i in 0 ..< 32 {
dispatch_async(q) {
setX(i)
}
}

// Schedule a completion handler
dispatch_barrier_async(q) {
print("x: \(x)")
dispatch_semaphore_signal(sema)
}

// Start running all the scheduled tasks
dispatch_resume(q)
// Wait until done
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)

如果您了解实际应该发生的情况,那么这里没有正确的值

关于swift - 这是否是快速进行竞争条件的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031240/

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