由于内存模型,我意识到双重检查锁定在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中有类似的问题?这种模式有哪些替代方案(反模式)。
由于
答案 0 :(得分:2)
同样存在缺陷 - 你有竞争条件
您必须输入同步部分,然后检查标记
答案 1 :(得分:0)
这看起来像对我来说过早优化。 (例如)
有什么问题- (void) startStreaming:(NSArray *)watchlistInstrumentData {
@synchronized(self) {
if (!self.isStreaming) {
...