2008-10-29 25 views
8

की थ्रेड सुरक्षा मैंने परीक्षण और त्रुटि के माध्यम से खोज की है कि MATLAB इंजन फ़ंक्शन पूरी तरह से थ्रेड सुरक्षित नहीं है।मैटलैब इंजन एपीआई

क्या कोई नियमों को जानता है?

परीक्षण और त्रुटि के माध्यम से की खोज की:

Windows पर, MATLAB के लिए कनेक्शन कॉम के माध्यम से है, इसलिए कॉम अपार्टमेंट सूत्रण नियम लागू होते हैं। सभी कॉल एक ही थ्रेड में होनी चाहिए, लेकिन कई कनेक्शन अलग-अलग थ्रेड में तब तक हो सकते हैं जब तक कि प्रत्येक कनेक्शन अलग न हो।

नीचे दिए गए उत्तर से ऐसा प्रतीत होता है कि इस यूनिक्स, जहां कॉल जब तक कॉल क्रमानुसार बना रहे हैं एक से अधिक थ्रेड से बनाया जा सकता पर ऐसा नहीं है।

+0

MATLAB इंजन afaik यूनिक्स पर विंडोज पर COM का उपयोग कर कार्यान्वित किया जाता है, और पाइप का उपयोग कर: http://www.mathworks.com/help/matlab/matlab_external/ का उपयोग कर-matlab-engine.html – Amro

उत्तर

3

जब मैं पहली बार इंजन का उपयोग शुरू कर दिया, मैं धागा सुरक्षा पर किसी भी प्रलेखन के पार चला नहीं किया, इसलिए मुझे लगता है कि यह थ्रेड-सुरक्षित नहीं किया गया था ग्रहण किया।

मैं एक इंजन उदाहरण के लिए उपयोग सिंक्रनाइज़ करने के लिए एक सी ++ वर्ग का उपयोग करें। अधिक समानांतर प्रसंस्करण डिज़ाइन के लिए, मैं इंजन वर्ग के कई उदाहरणों को तुरंत चालू करता हूं।

(संपादित करें) मैं Solaris पर MATLAB R14 का उपयोग कर रहा हूं। मैं 'engOpen' कॉल का उपयोग कर इंजन खोलता हूं, और इसे 'engClose' का उपयोग करके बंद करता हूं। मेरा प्लेटफ़ॉर्म क्रैश नहीं होता है जब बंद को ओपन नामक एक अलग थ्रेड द्वारा कॉल किया जाता है।

1

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

ध्यान दें कि आंतरिक रूप से, मैटलैब बहुत सारे थ्रेड का उपयोग करता है। जीयूआई धागे हैं, और पिछले कुछ संस्करणों में, दुभाषिया दृश्यों के पीछे कई धागे का उपयोग कर सकते हैं। लेकिन, दुभाषिया अर्थात् एकल-थ्रेडेड दुभाषिया (इंटरप्ट्स के साथ) के बराबर है।

1

engOpen का उपयोग करने के बजाय आप engOpenSingleUse का उपयोग कर सकते हैं ताकि एक से अधिक थ्रेड अलग-अलग काम कर सकें। (केवल Windows)

6
documentation से

,

MATLAB libraries are not thread-safe. If you create multithreaded applications, make sure only one thread accesses the engine application.