static pthread_mutex_t gLock; //global
pthread_mutex_init(&gLock,NULL); //in init
pthread_mutex_lock(&gLock);
for(int i=0;i<[message count];i++)
CFSetAddValue(mSet, [message objectAtIndex:i]);
pthread_mutex_unlock(&gLock);
मेरा कोको एप्लिकेशन pthread_mutex_t के साथ मोड का जवाब नहीं दे रहा है।pthread_mutex_t वीएस @ सिंक्रनाइज़ ब्लॉक?
@synchronized(mSet)
{
for(int i=0;i<[message count];i++)
CFSetAddValue(mSet, [message objectAtIndex:i]);
}
मेरा एप्लिकेशन सिंक्रनाइज़ ब्लॉक के साथ ठीक काम कर रहा है।
क्यों?
.h फ़ाइल में \t pthread_mutexattr_t attr; \t pthread_mutex_t mutex; init \t \t pthread_mutexattr_settype (और attr, PTHREAD_MUTEX_RECURSIVE); \t \t pthread_mutex_init (और म्युटेक्स, &attr); dealloc में pthread_mutex_destroy (और म्युटेक्स); मेरी समारोह pthread_mutex_lock में (और म्युटेक्स); \t \t \t \t CFSetRemoveAllValues (mySet); \t \t \t pthread_mutex_unlock (और म्युटेक्स); है यह ठीक है? –
@ParagBafna ए) mutex attr 'static' हो सकता है, और आपके द्वारा बनाए गए प्रत्येक म्यूटेक्स के लिए उपयोग किया जाता है - या गैर स्थैतिक और केवल '-init' b में उपयोग किया जाता है) mutex attr को ivar c नहीं होना चाहिए c) आपको अपना सत्यापन करना चाहिए परिणाम कोड डी) आप कुछ मामलों में 'pthread_mutex_trylock' भी पसंद कर सकते हैं। ई) आपको प्रारंभकर्ताओं का उपयोग करके structs शुरू करना चाहिए। उसके अलावा अच्छा लग रहा है! तेजी से लॉकिंग के लिए तैयार करें =) – justin
परिणाम कोड अधिकतर लॉकिंग और थ्रेडिंग त्रुटियों का पता लगाने के लिए उपयोगी होते हैं। । – justin