2011-05-26 15 views
9

मैं एंड्रॉइड नेटिव डेवलपमेंट किट का उपयोग करके कुछ मल्टीथ्रेडिंग करने की कोशिश कर रहा हूं, इसलिए मुझे सी ++ पक्ष पर एक म्यूटेक्स चाहिए।एंड्रॉइड एनडीके म्यूटेक्स

Android NDK के साथ mutex बनाने और उपयोग करने का सही तरीका क्या है?

धन्यवाद

उत्तर

9

NDK pthread mutexes के लिए समर्थन करने के लिए प्रकट होता है। मैंने खुद का उपयोग नहीं किया है।

+0

धन्यवाद। मैं पदों के एक समूह में आया था कि यह अभी तक लागू नहीं किया गया था, लेकिन वे बहुत दिनांकित होना चाहिए। मैंने पीडीड्रेड का उपयोग करके एनडीके के लिए एक छोटा मॉड्यूल लिखा था, और इसे संकलित किया, लेकिन मैंने इसे चलाने की कोशिश कभी नहीं की। मैं जावा पक्ष पर थ्रेडिंग करने में सक्षम था। वैसे भी धन्यवाद, मैं शायद कुछ बिंदु पर मॉड्यूल का उपयोग कर समाप्त हो जाएगा। – bitwise

+2

वंशावली के लिए टिप्पणी: मेरे पास एक ऐसा अनुप्रयोग है जो पर्थ्रेड का उपयोग कर रहा है, साथ ही साथ पर्थ्रेड म्यूटेक्स का उपयोग कर रहा है, और यह ठीक काम कर रहा है, ऐसा लगता है जैसे वे कार्यान्वित किए गए हैं, और काम करते हैं। –

7

यहाँ है कि हम कैसे विंडोज और Android पर जाना (OS_LINUX परिभाषित Android के लिए है):

class clMutex 
{ 
public: 
    clMutex() 
    { 
#ifdef OS_LINUX 
     pthread_mutex_init(&TheMutex, NULL); 
#endif 
#ifdef OS_WINDOWS 
     InitializeCriticalSection(&TheCS); 
#endif 
    } 

    /// Enter the critical section -- other threads are locked out 
    void Lock() const 
    { 
#ifdef OS_LINUX 
     pthread_mutex_lock(&TheMutex); 
#endif 
#ifdef OS_WINDOWS 

     if (!TryEnterCriticalSection(&TheCS)) EnterCriticalSection(&TheCS); 
#endif 
    } 

    /// Leave the critical section 
    void Unlock() const 
    { 
#ifdef OS_LINUX 
     pthread_mutex_unlock(&TheMutex); 
#endif 
#ifdef OS_WINDOWS 
     LeaveCriticalSection(&TheCS); 
#endif 
    } 

    ~clMutex() 
    { 
#ifdef OS_WINDOWS 
     DeleteCriticalSection(&TheCS); 
#endif 
#ifdef OS_LINUX 
     pthread_mutex_destroy(&TheMutex); 
#endif 
    } 

#ifdef OS_LINUX 
    // POSIX threads 
    mutable pthread_mutex_t TheMutex; 
#endif 
#ifdef OS_WINDOWS 
    mutable CRITICAL_SECTION TheCS; 
#endif 
}; 

Linderdaum Engine के डेवलपर्स मैं हमारी एसडीके में Mutex.h के लिए देखने की अनुशंसा के रूप में।

6
#include <pthread.h> 

class CThreadLock 
{ 
public: 
    CThreadLock(); 
    virtual ~CThreadLock(); 

    void Lock(); 
    void Unlock(); 
private: 
    pthread_mutex_t mutexlock; 
}; 

CThreadLock::CThreadLock() 
{ 
    // init lock here 
    pthread_mutex_init(&mutexlock, 0); 
} 

CThreadLock::~CThreadLock() 
{ 
    // deinit lock here 
    pthread_mutex_destroy(&mutexlock); 
} 
void CThreadLock::Lock() 
{ 
    // lock 
    pthread_mutex_lock(&mutexlock); 
} 
void CThreadLock::Unlock() 
{ 
    // unlock 
    pthread_mutex_unlock(&mutexlock); 
} 
+0

यह सवाल एक साल पुराना है .. और पहले ही इसका उत्तर दिया जा चुका है। – bitwise

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