5

Javaではメモリモデルが原因でダブルチェックロックに欠陥があることに気付きましたが、これは通常、シングルトンパターンに関連付けられており、シングルトンの作成を最適化します。

この場合、Objective-cではどうでしょうか。

アプリケーションがデータをストリーミングしているかどうかを判断するためのブールフラグがあります。startStreaming、stopStreaming、streamingDataReceivedの3つのメソッドがあり、以下を使用して複数のスレッドからそれらを保護します。

- (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) {

このダブルチェックは不要ですか?ダブルチェックには、JavaScriptと同様のObjective-cの問題がありますか?このパターン(アンチパターン)の代替手段は何ですか。

ありがとう

4

2 に答える 2

2

同様に欠陥があります-競合状態があります

同期セクションに入り、フラグを確認する必要があります

于 2010-06-07T14:49:13.603 に答える
0

それは時期尚早の最適化のように思えます。何が悪いのか(例えば)

- (void) startStreaming:(NSArray *)watchlistInstrumentData {
        @synchronized(self) {
            if (!self.isStreaming) {
...
于 2010-06-07T15:43:50.663 に答える