2010-06-07 24 views
5

tôi nhận ra hai lần kiểm tra là thiếu sót trong java do mô hình bộ nhớ, nhưng mà thường được kết hợp với mô hình singleton và tối ưu hóa việc tạo ra các singleton.đôi kiểm tra khóa - khóa khách quan c

Điều gì xảy ra trong trường hợp này trong mục tiêu-c:

Tôi có cờ boolean để xác định xem ứng dụng của tôi có đang truyền dữ liệu hay không. Tôi có 3 phương pháp, startStreaming, stopStreaming, streamingDataReceived và tôi bảo vệ chúng khỏi nhiều chủ đề bằng cách sử dụng:

Đây có phải là séc không cần thiết không? Liệu kiểm tra đôi có vấn đề tương tự trong mục tiêu-c như trong java? Các lựa chọn thay thế cho mẫu này (chống mẫu) là gì.

Cảm ơn

Trả lời

2

Nó được bình đẳng bị biến dị - bạn có một tình trạng chủng tộc

Bạn phải nhập phần đồng bộ hóa của bạn và sau đó kiểm tra cờ

+0

Bạn có thể biện minh cho câu trả lời này không? –

+0

Bạn có thể mở rộng câu trả lời cho thêm gợi ý để lựa chọn thay thế. Ví dụ, có một tương đương với "thoáng" hay AtomicInteger/etc trong Objective-C? –

0

Trông giống như tối ưu hóa quá sớm đối với tôi. Có gì sai với (ví dụ)

- (void) startStreaming:(NSArray *)watchlistInstrumentData { 
     @synchronized(self) { 
      if (!self.isStreaming) { 
... 
+0

Tôi đã tránh chi phí gia nhập khối đồng bộ nếu nó không cần thiết. – bandejapaisa

+0

Đó là ý tôi là "tối ưu hóa sớm". Tại sao bạn sẽ quan tâm đến chi phí gia nhập khối đồng bộ, trừ khi bạn đã đo nó với một hồ sơ và nó đã tham gia một số lượng đáng kể thời gian? – JeremyP

Các vấn đề liên quan