2011-02-01 18 views
8

मैं एक पाश क्योंकि पाश के शरीर में मैं एक और धागा जो पहले पाश फिर से चलाता है समाप्त करने के लिए की जरूरत है बनाने हूँ जो एकएनएसएलॉक - लॉक लॉक लॉक करते समय बस ब्लॉक करना चाहिए?

[lock lock]; 

के साथ शुरू होता है। (समाप्त होने पर अन्य धागा इसे अनलॉक कर देगा)।

दूसरा पाश मैं निम्नलिखित त्रुटि मिलती है पर फिर भी:

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. 

"ताला" प्रलेखन निम्नलिखित राज्यों:

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

जो मुझे लगता है कि यह सिर्फ ब्लॉक कर देगा बनाता ताला सकता है जब तक हासिल किया जाना चाहिए?

उत्तर

8

दोनों समस्याओं की तरह लगता है:

  • एक धागा और एक अन्य पर भी अनलॉक करने पर एक ताला लॉक करना समर्थित नहीं है - आप शायद NSCondition चाहते हैं। पैरेंट थ्रेड में NSCondition पर प्रतीक्षा करें, और इसे बच्चे के थ्रेड में सिग्नल करें।
  • एक सामान्य NSLock लॉक होने पर लॉक नहीं किया जा सकता है। यही NSRecursiveLock है।
3

क्या आपको पूरा होने पर -unlock भेजना याद आया? -lock पर प्रत्येक कॉल को -unlock पर कॉल के साथ जोड़ा जाना चाहिए।

+0

मैंने निश्चित रूप से किया :-) – Nippysaurus

संबंधित मुद्दे