我意识到由于内存模型,双重检查锁定在 java 中存在缺陷,但这通常与单例模式和优化单例的创建有关。
在objective-c的这种情况下呢:
我有一个布尔标志来确定我的应用程序是否是流数据。我有 3 种方法,startStreaming、stopStreaming、streamingDataReceived,我使用以下方法保护它们免受多个线程的影响:
- (void) streamingDataReceived:(StreamingData *)streamingData {
if (self.isStreaming) {
@synchronized(self) {
if (self.isStreaming) {
- (void) stopStreaming {
if (self.isStreaming) {
@synchronized(self) {
if (self.isStreaming) {
- (void) startStreaming:(NSArray *)watchlistInstrumentData {
if (!self.isStreaming) {
@synchronized(self) {
if (!self.isStreaming) {
这是不必要的双重检查吗?仔细检查在objective-c中是否有与java中类似的问题?这种模式的替代品是什么(反模式)。
谢谢