我有一段代码,我想一次只运行一次。如果它同时运行不止一次,那么它不是世界末日,但是资源很重,而这就是问题所在。我们称之为HEAVY_STUFF。
问题是我的所有任务都依赖于HEAVY_STUFF完成后至少运行一次。最多可以执行2000个任务,并且会在一定程度上发生所有2000个任务在完全相同的时间完成。通常我会使用dispatch_group_notify
或类似的,但这意味着HEAVY_STUFF只运行一次就会运行2000次。另外要求1999线程不等待,因为它们占用大量内存 - 例如,如果1999线程处于调度等待状态,那么即使小心{{{{{{{{{ 1}}包装。哎哟。
以下是我现在正在解决的问题。我不确定它是否是线程安全的,但似乎到目前为止工作 - 内存使用率保持在35MB左右,HEAVY_STUFF在每个任务完成后至少运行一次。这是线程安全的吗?什么是更好的GCD解决方案?我不想使用NSOperation *。
autoreleasepool
感谢您的帮助。
答案 0 :(得分:-1)
这只是运行一次的线程安全:
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});