mach_task_self_ 不是并发安全的,因为它涉及共享可变状态

问题描述 投票:0回答:1

我有一个返回设备内存使用情况的函数。它使用

mach_task_self_
发出警告,表明它不是并发安全的。

task_info(mach_task_self_, task_flavor_t(TASK_VM_INFO), intPtr, &count)

根据这个答案,您可以导入并标记为

@preconcurrency
,但是当我尝试这样做时,它不起作用。

@preconcurrency import Darwin.Mach.mach_init

它说

'@preconcurrency' attribute on module 'Darwin' has no effect

当我跳转到

mach_task_self_
的定义时,它显示它位于
Darwin > Mach > mach_init

ios swift concurrency swift-concurrency swift6
1个回答
0
投票

如果您尝试访问的内容也由另一个非预并发导入导入,则

@preconcurrency import
似乎不起作用。据推测,您还导入了诸如
Foundation
之类的东西。

如果将导入放在单独的文件中,

@preconcurrency import Darwin

var machTaskSelf: mach_port_t {
    mach_task_self_
}

没有任何警告。

现在您可以在其他地方使用这个计算属性。

task_info(machTaskSelf, task_flavor_t(TASK_VM_INFO), intPtr, &count)
© www.soinside.com 2019 - 2024. All rights reserved.