मैं एक बहु-थ्रेड प्रोग्राम पर काम कर रहा हूं, और म्यूटक्स को परिभाषित करने के बारे में एक प्रश्न है।सी मल्टीथ्रेड प्रोग्राम में mutex को परिभाषित करने के लिए कहां?
प्रासंगिक जानकारी: कार्यक्रम में main.c
है जहां हम उपयोगकर्ता इनपुट के अनुसार एक विशिष्ट कार्रवाई निर्धारित करते हैं। मुख्य एक मास्टर_फंक्शन कहते हैं जो master.c
नाम की फ़ाइल में स्थित है। master.c
फ़ाइल में हम कुछ अन्य कार्यों (प्रासंगिक नहीं) के साथ एन धागे बनाते हैं। थ्रेड्स son_threads नामक एक फ़ंक्शन को कॉल करते हैं जो son.c
फ़ाइल में स्थित है और जब वे एक महत्वपूर्ण क्षेत्र में प्रवेश करते हैं तो एक म्यूटेक्स का उपयोग करने की आवश्यकता होती है (दौड़ की स्थिति को रोकने के लिए कई वैश्विक चर संपादित करना)। मेरे पास एक और फ़ाइल है type.h
जहां मैं उपयोग करने के लिए आवश्यक कई वैश्विक चर परिभाषित करता हूं।
म्युटेक्स की घोषणा है:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
तो मैं अपने type.h
तो यह son.c
फ़ाइलों को दिखाई दे म्युटेक्स को परिभाषित करने की कोशिश की। जब मैं संकलन करने की कोशिश करता हूं तो यह मुझे त्रुटि देता है। जो सही है क्योंकि मैं कई फ़ाइलों में उस म्यूटेक्स को परिभाषित कर रहा हूं।
लेकिन मुझे पूरा यकीन है कि मैं son.c
फ़ाइल में म्यूटेक्स को परिभाषित नहीं कर सकता क्योंकि प्रत्येक बार जब मैं उस धागे को बनाता हूं, तो म्यूटेक्स को इसकी डिफ़ॉल्ट सेटिंग में प्रारंभ किया जाएगा, जिससे मुझे इसका सही उपयोग करने की अनुमति नहीं मिलती है। इसके बारे में निश्चित नहीं है।
म्यूटेक्स को वैश्विक चर होना चाहिए, जहां एन धागे के पास इसका उपयोग है। तो मुझे इसे कहां रखना है?
मुझे नहीं पता कि मैं खुद को सही समझा रहा हूं या नहीं। अपनी पूरी कोशिश कर रहा हूँ।
ठीक है मैं समझता हूं कि आपका क्या मतलब है। मुझे देखने दो कि यह कैसे काम करता है। सलाह के लिए धन्यवाद! – Alessandroempire
मुझे नहीं लगता कि 'ग्लोबल' वाला गेम यहां परोसता है। आपको '.h' फ़ाइल में एक घोषणा की आवश्यकता है और' .c' में प्रारंभिक * के साथ एक परिभाषा * की आवश्यकता है। 'Pthread_mutex_t' के लिए डिफ़ॉल्ट प्रारंभ नहीं होगा। –
@ जेन्स गस्टेड ने ठीक वही किया जो मैंने अभी किया और यह काम किया। मैंने नोटिस नहीं किया था कि मैं .h फ़ाइल में mutex प्रारंभ कर रहा था। बहुत बड़ी गलती। – Alessandroempire