2011-02-01 10 views
8

que tienen un bucle que comienza con unNSLock: ¿debería bloquearse al bloquear un bloqueo bloqueado?

[lock lock]; 

porque en el cuerpo del bucle estoy creando otro hilo que tiene que terminar antes de que el bucle se ejecuta de nuevo. (El otro hilo lo desbloqueará cuando termine).

Sin embargo, en el segundo bucle me sale el siguiente error:

2011-02-02 07:15:05.032 BLA[21915:a0f] *** -[NSLock lock]: deadlock (<NSLock: 0x100401f30> '(null)') 
2011-02-02 07:15:05.032 BLA[21915:a0f] *** Break on _NSLockError() to debug. 

El "bloqueo" documentación indica lo siguiente:

Abstract: Attempts to acquire a lock, blocking a thread’s execution until the lock can be acquired. (required)

que me hace pensar que sería sólo bloquear hasta que el bloqueo podría ser adquirido?

Respuesta

8

Suena como dos problemas:

  • El bloqueo de un bloqueo en un hilo y el desbloqueo en otro no es compatible - es probable que desee NSCondition. Espere en el NSCondition en el subproceso principal y señálelo en el subproceso secundario.
  • Un NSLock normal no se puede bloquear mientras ya está bloqueado. Eso es lo que NSRecursiveLock es para.
3

¿Recordó enviar -unlock cuando terminó? Cada llamada a -lock debe vincularse con una llamada al -unlock.

+0

Sin duda lo hice :-) – Nippysaurus

Cuestiones relacionadas