5

Làm thế nào bạn có thể xác định xem một số dispatch_semaphore_t đang chờ đợi trên w/out gây ra một sự chờ đợi vào nó? Ban đầu tôi đã nghĩ:Làm thế nào để xác định xem một semaphore công văn đang được chờ đợi?

if (dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW)) { 
    NSLog(@"No more resources, wait"); 
} else { 
    NSLog(@"Resources available, shouldn't wait"); 
} 

Nhưng hành vi làm dispatch_semaphore_wait() semaphore được giảm đi như vậy thì tôi đã suy nghĩ:

if (dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW)) { 
    NSLog(@"No more resources, wait"); 
} else { 
    dispatch_semaphore_signal(mySemaphore); 
    NSLog(@"Resources available, shouldn't wait"); 
} 

nào có kết quả cuối cùng của việc không decrementing các semaphore nhưng có vẻ như một hack , đề xuất?

EDIT

Như tôi đã gõ ra những gì tôi đang làm và làm thế nào tôi đi đến kết luận này, tôi nhận ra rằng tôi đã thực sự suy nghĩ về các giải pháp một cách sai lầm, tôi chỉ muốn biết nếu tôi là chờ một tài nguyên và có thể hiển thị hộp thoại 'chờ' cho người dùng. Tôi nghĩ rằng đây là đúng cách để làm điều đó:

+1

Điều này không thể thực hiện được (ít nhất là không đáng tin cậy) và thực tế bạn muốn làm điều đó gợi ý lỗi thiết kế. Tôi tham gia @das khi hỏi: bạn đang cố gắng làm gì ở mức trừu tượng cao? Tình huống nào khiến bạn nghĩ rằng bạn muốn biết liệu một semaphore có đang chờ đợi không? –

+0

@KenThomases Bạn nói đúng, tôi đã đi sai hướng này, tôi đã chỉnh sửa trong giải pháp tốt hơn. – Shizam

Trả lời

4

dispatch_semaphore_wait() đã chỉ giảm đi giá trị semaphore nếu nó trả về 0.

Nếu thời gian chờ hết hạn (tức là nó trả về khác không), các giá trị semaphore đã không được giảm đi.

Hãy suy nghĩ về sự sụt giảm trong trường hợp thành công khi sở hữu một trong các tài nguyên do semaphore tính quản lý, nếu bạn báo hiệu ngay sau khi chờ đợi thành công, bạn sẽ chỉ ra rằng bạn đã ngừng sử dụng tài nguyên đó ngay lập tức có lẽ không phải những gì bạn muốn.

Bạn đang cố gắng làm gì?

+0

Đánh dấu điều này là giải pháp như câu lệnh của @ das là chính xác VÀ tôi đã đi sai hướng này :) – Shizam

+1

Tại sao trên trái đất không thể tài liệu xác định hành vi này cho 'dispatch_semaphore_wait()' - nó hoàn toàn không có gì về giá trị semaphore KHÔNG bị giảm sút nếu hết thời gian chờ và tài nguyên đã được sử dụng. Tuy nhiên, câu trả lời xuất sắc - Tôi có thể xác nhận đây là trường hợp, việc giảm semaphore chỉ xảy ra khi thử nghiệm đối với 'DISPATCH_TIME_NOW' trả về 0. Bạn không cần phải' dispatch_semaphore_signal() 'trong trường hợp khác 0. Cảm ơn bạn! –

+0

@ rob-glassey không có tranh luận rằng tài liệu bị thiếu vào thời điểm này, vui lòng gửi một [lỗi] (http://bugreport.apple.com)! – das

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