Come è possibile determinare se un dispatch_semaphore_t
è in attesa su w/out causando un'attesa su di esso? Inizialmente ero pensando:Come determinare se è in attesa un semaforo di invio?
if (dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW)) {
NSLog(@"No more resources, wait");
} else {
NSLog(@"Resources available, shouldn't wait");
}
Ma l'atto di fare dispatch_semaphore_wait()
il semaforo è decrementato così poi ho pensato:
if (dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW)) {
NSLog(@"No more resources, wait");
} else {
dispatch_semaphore_signal(mySemaphore);
NSLog(@"Resources available, shouldn't wait");
}
che ha il risultato finale non decremento del semaforo, ma sembra un hack , suggerimenti?
EDIT
Mentre stavo scrivendo che cosa sto facendo e come sono arrivato a questa conclusione mi sono reso conto che stavo davvero pensando la soluzione nel modo sbagliato, volevo solo sapere se ero in attesa di una risorsa ed essere in grado di mostrare una finestra di dialogo di 'attesa' all'utente. Credo che questo sia il corretta modo per farlo:
Questo non può essere fatto (almeno non in modo affidabile) e il fatto che si desideri farlo suggerisce un errore di progettazione. Mi unisco a @das nel chiedere: cosa stai cercando di fare ad un alto livello di astrazione? Quale situazione ti fa pensare di voler sapere se un semaforo viene atteso? –
@KenThomases Hai ragione, stavo arrivando a questo nel modo sbagliato, ho redatto la soluzione migliore. – Shizam