objective-c - 两个线程调用一个函数 > 局部变量访问需要同步吗?

标签 objective-c ios multithreading thread-safety armv7

如果两个线程“同时”调用一个函数, 函数本地变量(不是 ivars)是否需要在互斥体/同步块(synchronized block)中受到保护,以防止其他线程更改/修改它们?

或者,每个线程是否在堆栈上获取自己的局部变量副本,就像递归调用会/应该那样?

使用下面极其虚假且毫无意义的函数作为我不确定是否线程安全的示例:

- (TicketResponseObj *)createTicketResponse:(NSHTTPURLResponse *)httpResponse {

    //local variable declaration and assignment
    NSInteger localVar_RespCode = [httpResponse statusCode]; 

    //local object ptr declaration, obj allocation, and ptr assignment
    TicketResponseObj *localObj_TicketResponse = [[TicketResponseObj alloc] initWithCode:localVar_RespCode];

    //return ptr to instance of local object
    return localObj_TicketResponse;
}

请假设 TicketResponseObj 的 initWithCode 是线程安全的。我使用 LLVM-GCC 4.2 作为我的编译器,并且我的目标是 armv7 架构。 (这个示例函数也可以很容易地是静态的,如果这很重要的话?)

抱歉,我知道这可能是一个愚蠢的问题,但我的 friend 建议答案完全取决于编译器/体系结构等。

感谢您的帮助和耐心!

最佳答案

不,它们不需要同步。局部变量和变量引用存在于堆栈中,因此每个线程都维护自己的堆栈。对于 allocnew 的情况,运行时已经负责允许并发访问堆分配器。

关于objective-c - 两个线程调用一个函数 > 局部变量访问需要同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112096/

相关文章:

iphone - 我的应用程序会响应 url 方案吗?

ios - 组织多个 NSURLSessionTasks

c++ - InterlockedExchange 与 InterlockedCompareExchange 自旋锁

objective-c - Objective C 从另一个应用程序中检索数据

iOS:数据 session 与临时 session

ios - 子类 UIViewControllers 的通用类?

ios - Block 捕获值,不会改变

objective-c - 透明图像叠加在下方 View 上

java - 在 java servlet 应用程序中执行异步数据库任务

java - 理论上是否可以使用静态分析工具证明Java代码不存在竞争条件?