双重检查锁定 - 目标c

时间:2010-06-07 14:43:37

标签: objective-c locking double-checked-locking

由于内存模型,我意识到双重检查锁定在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中有类似的问题?这种模式有哪些替代方案(反模式)。

由于

2 个答案:

答案 0 :(得分:2)

同样存在缺陷 - 你有竞争条件

您必须输入同步部分,然后检查标记

答案 1 :(得分:0)

这看起来像对我来说过早优化。 (例如)

有什么问题
- (void) startStreaming:(NSArray *)watchlistInstrumentData {
        @synchronized(self) {
            if (!self.isStreaming) {
...