c++ - 什么是线程

标签 c++ objective-c multithreading

<分区>

一直在网上看线程是什么,感觉不太懂。有人可以阐明这一点吗?就与 C++ 相关的编程语言而言,Objective-C 会很好。

在objective-c中,遇到了

@property(nonatomic, strong) NSString *name;

对 nonatomic 的解释是它意味着不用担心多个线程试图同时访问对象,而 objective-c 不必合成线程安全代码。那么这到底是什么意思。

最佳答案

一个进程可以由多个执行线程组成,逻辑上可以认为它们彼此同时运行。每个线程独立运行但共享相同的内存和进程状态。单个线程可以“做一件事”:执行计算、与网络交互、更新 UI、解码视频等。但是,如果没有重要,单个线程无法同时完成所有这些程序员的额外工作量。在一个进程中拥有多个线程使程序员能够轻松地使应用程序同时执行多项操作(多任务处理)。

不过,使用多线程确实带来了一些新的挑战。例如,如果您有两个线程访问同一个变量,您可能会遇到并发危险,其中一个线程可能无法在另一个线程访问它之前完全更新该变量,从而导致程序失败。 Objective-C 默认会生成线程安全的代码,来避免这种情况。 nonatomic 告诉编译器您永远不会同时从多个线程访问它,因此编译器可以跳过线程安全代码并生成更快的代码。如果您要提供自己的同步,这会很有用(例如,保持一组属性同步,而 Objective-C 本身无法帮助您)。

如果您违反核心 nonatomic 假设并同时从多个线程访问一个 nonatomic 变量,一切都会变得一团糟。

关于c++ - 什么是线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867208/

相关文章:

C++ : Error does not name a type

ios - 长按“开关控制”按钮返回主菜单

c++ 理解多线程中的 lock_guard 和 mutex

java - 在 netty 中,可以将池化的 ByteBuf 传递给另一个线程吗?

c++ - 没有调用复制构造函数?

c++ - 重定向 PostgreSQL Qt 驱动程序标准输出/标准错误输出

c++ - 并发使用中内联汇编的设计元素

objective-c - swift 3 - 方法不会覆盖其父类(super class)中的任何方法

ios - NSNotificationCenter 线程在第二次调用时中断,即使它已被删除

python - 在Python中使用threading.Semaphore()