首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OSAtomicIncrement32Barrier不以为然,如何解决这个问题?

OSAtomicIncrement32Barrier不以为然,如何解决这个问题?
EN

Stack Overflow用户
提问于 2022-10-26 07:32:15
回答 1查看 30关注 0票数 0

我正在使用Xcode14和ios 16在我的ios应用程序上尝试Parse服务器,我安装了Parse,但是当我运行代码时,会收到以下警告消息:

代码语言:javascript
复制
'OSAtomicIncrement32Barrier' is deprecated: first deprecated in iOS 10.0 - Use atomic_fetch_add() from <stdatomic.h> instead

任何帮助我如何解决这个问题:

代码语言:javascript
复制
+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray<BFTask *> *)tasks {
    __block int32_t total = (int32_t)tasks.count;
    if (total == 0) {
        return [self taskWithResult:nil];
    }

    __block int32_t cancelled = 0;
    NSObject *lock = [[NSObject alloc] init];
    NSMutableArray *errors = [NSMutableArray array];

    BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource];
    for (BFTask *task in tasks) {
        [task continueWithBlock:^id(BFTask *t) {
            if (t.error) {
                @synchronized (lock) {
                    [errors addObject:t.error];
                }
            } else if (t.cancelled) {
                OSAtomicIncrement32Barrier(&cancelled); // error is here
            }

            if (OSAtomicDecrement32Barrier(&total) == 0) { // error is here
                if (errors.count > 0) {
                    if (errors.count == 1) {
                        tcs.error = [errors firstObject];
                    } else {
                        NSError *error = [NSError errorWithDomain:BFTaskErrorDomain
                                                             code:kBFMultipleErrorsError
                                                         userInfo:@{ BFTaskMultipleErrorsUserInfoKey: errors }];
                        tcs.error = error;
                    }
                } else if (cancelled > 0) {
                    [tcs cancel];
                } else {
                    tcs.result = nil;
                }
            }
            return nil;
        }];
    }
    return tcs.task;
}

EN

回答 1

Stack Overflow用户

发布于 2022-10-26 15:07:07

C11有原子支持,因此您可以执行以下操作:

代码语言:javascript
复制
#include <stdatomic.h>

// Declare an atomic int and initialize it to zero
atomic_int total;
atomic_init(&total, 0);

// Note: C17 and C23 allow safe direct initialization
// i.e. atomic_int total = 0;

// Operations such as ++total and --total are atomic
++total;

// Or alternatively
atomic_fetch_add(&total, 1);
atomic_fetch_sub(&total, 1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74204149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档