我有一个返回设备内存使用情况的函数。它使用
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
如果您尝试访问的内容也由另一个非预并发导入导入,则
@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)