2012-04-10 10 views
8

stavo guardando un (2 anni) video tutorial sul multithreading che ha dichiarato che@synchronized vs NSLock grado vs. pthread_mutex_t

  • NSLock esempio è 3 volte più veloce rispetto all'utilizzo di @synchronized
  • pthread_mutex_t trova 2x più veloce di un'istanza NSLock (efficacemente 6x più veloce rispetto @synchronized)

È vero? Non ho trovato nulla che dichiari con autorità che lo è, ma volevo solo interrogare qualcuno di voi su StackOverflow per la vostra opinione e forse a prova di sicurezza.

Grazie!

Mentre io ho già accettato la risposta corretta, i futuri spettatori di questa domanda troveranno questo articolo per essere utile: http://perpendiculo.us/?p=133

risposta

12

E 'importante tenere a mente che @synchronized include la logica necessaria try/catch per rilascia il blocco in un'eccezione. Una volta aggiunta questa logica, la differenza di prestazioni (che non è eccezionale in termini di grandezza generale) probabilmente diminuirà in modo significativo.

+4

Ricorda inoltre che @synchronized è un blocco ricorsivo, dove NSLock non lo è. –

+1

@ RichardJ.RossIII - Un punto giusto. Probabilmente non è significativo nella maggior parte dei casi, ma potrebbe spiegare un po 'della differenza di prestazioni: '@ synchronized' dovrebbe essere confrontato con NSRecursiveLock. –

+1

E che mi dici di pthread_mutex? Sono più interessato a @Synchronized vs pthread_mutex (ho letto molto sui due, da quando ho postato questa domanda). – ArtSabintsev

Problemi correlati