Swift 控制台中的命令行工具Xcode中不会打印任何内容
当我运行以下代码时,命令行工具Xcode中的控制台中不会打印任何内容:Swift 控制台中的命令行工具Xcode中不会打印任何内容,swift,barrier,Swift,Barrier,当我运行以下代码时,命令行工具Xcode中的控制台中不会打印任何内容: import Foundation class A { var someValue = 0 let concurrentQueue = dispatch_queue_create("queue_for_property", DISPATCH_QUEUE_CONCURRENT) func increaseValueBy1000() { dispatch_barrier_async(concurrent
import Foundation
class A {
var someValue = 0
let concurrentQueue = dispatch_queue_create("queue_for_property", DISPATCH_QUEUE_CONCURRENT)
func increaseValueBy1000() {
dispatch_barrier_async(concurrentQueue) {
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()
<代码>导入基础
甲级{
var someValue=0
让concurrentQueue=dispatch\u queue\u create(“queue\u for\u属性”,dispatch\u queue\u CONCURRENT)
func将值增加1000(){
调度\u屏障\u异步(concurrentQueue){
对于0中的uu..<1000{
设v=self.someValue+1
印刷品(五)
self.someValue=v
}
}
}
}
设instance1=A()
调度异步(调度获取全局队列(QOS类用户交互,0)){
instance1.increaseValueBy1000()
}
instance1.increaseValueBy1000()
我在控制台中没有看到任何打印语句。
如果我移除隔离线,效果很好。
在这种情况下,我做错了什么?为什么我的屏障不允许打印?应用程序-比如命令行程序-没有“运行循环”必须调用
dispatch_main() // Swift 2
dispatchMain() // Swift 3
为了使用GCD。从:
此函数“停驻”主线程,并等待执行块
已提交到主队列。调用UIApplicationMain的应用程序
(iOS)、NSApplicationMain
(Mac OS X)或主屏幕上的CFRunLoopRun
线程不能调用dispatch\u main
应用程序——比如有命令行程序的应用程序——还没有“运行循环”的应用程序必须调用
dispatch_main() // Swift 2
dispatchMain() // Swift 3
为了使用GCD。从:
此函数“停驻”主线程,并等待执行块
已提交到主队列。调用UIApplicationMain的应用程序
(iOS)、NSApplicationMain
(Mac OS X)或主屏幕上的CFRunLoopRun
线程不能调用dispatch\u main
谢谢,你能解释一下我应该叫它什么部分吗?@wm.p1us:在你的节目结束时。另见,谢谢!工作起来很有魅力!但若我移除障碍,我得到的是复制值,但不是竞争条件。因为值不会被重写。我在用swift语言创建的命令行工具中也面临同样的问题。需要做什么?以上链接对于apple开发者论坛无效。请解释解决方案。@Tejas:我已经添加了一个指向当前文档的链接。谢谢,您能解释一下我应该将其称为哪个部分吗?@wm.p1us:在您的程序结束时。另见,谢谢!工作起来很有魅力!但若我移除障碍,我得到的是复制值,但不是竞争条件。因为值不会被重写。我在用swift语言创建的命令行工具中也面临同样的问题。需要做什么?以上链接对于apple开发者论坛无效。请解释解决方案。@Tejas:我添加了一个指向当前文档的链接。