2012-02-28 11 views
5

मैं थोड़ी देर के लिए एक बहुप्रचारित सी (लिनक्स) ऐप पर काम कर रहा हूं - एक वीडियो रिकॉर्डर जिसमें ऑडियो और वीडियो कैप्चर, एन्कोडिंग, मल्टीप्लेक्सिंग और लेखन के लिए थ्रेड हैं।मल्टीथ्रेडेड सी अनुप्रयोग ढांचे या पैटर्न

मैंने इसे पठ्रेड परिचालनों का उपयोग करके विज्ञापन-प्रसार को फेंकना शुरू कर दिया, लेकिन अब मैं इसे और अधिक राज्यों और कोड के रिफैक्टर भाग का समर्थन करने के लिए विस्तारित करने की कोशिश कर रहा हूं जो लॉकिंग के साथ डुप्लिकेट के रूप में पॉप अप कर रहे हैं, झंडे सेट कर रहे हैं और सिग्नलिंग कर रहे हैं एक शर्त, और इतने पर।

अब तक मैं क्या लेकर आए हैं कुछ इस तरह है:

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

मैं सामान्य तत्वों को एक संरचना में संग्रहीत करने की योजना बना रहा हूं और उन structs की एक सरणी है जो मैं सभी थ्रेड शुरू करने, जांचने और रोकने के लिए लूप कर सकता हूं।

चूंकि यह एक अधिक सामान्य थ्रेड समर्थन मॉडल में बदल जाता है, मैंने सोचा कि मैं संभावित रूप से पहिया को पुनर्निर्मित कर रहा हूं, इसलिए मैं यहां पूछूंगा कि कुछ अच्छे ज्ञात पैटर्न हैं जो मुझे आवेदन करना चाहिए।

+1

[gLib] (पर एक नज़र डालें http://developer.gnome.org/glib/stable/ glib-core.html) –

+0

@AlexandreC। मुझे ग्लिब के बारे में बहुत कुछ पता नहीं है, लेकिन ऐसा लगता है कि यह सिर्फ धागे को सार तत्व बनाता है और वजन जोड़ता है। मैं थ्रेड इंटरैक्शन मॉडल की तलाश में हूं। – blueshift

उत्तर

4

आपके विचार मुझे क्यूपी राज्य मशीन ढांचे में लागू सक्रिय ऑब्जेक्ट कंप्यूटिंग मॉडल की बहुत याद दिलाते हैं। विशेष रूप से, क्यूपी/सी और क्यूपी/सी ++ ढांचे को पीओएसईक्स में पोर्ट किया गया है (जिसमें लिनक्स, बीएसडी, इत्यादि शामिल हैं)। पोर्ट नोट को "नोट क्यूपी और लिनक्स" में विस्तार से वर्णित किया गया है: http://www.state-machine.com/linux/AN_QP_and_Linux.pdf

यहाँ लिनक्स के लिए QP बंदरगाह के मुख्य आकर्षण हैं:

  • प्रत्येक राज्य मशीन अपने स्वयं के पी-सूत्र में निष्पादित करता है। एक घटना-कतार पर पी-थ्रेड ब्लॉक एक म्यूटेक्स और एक शर्त चर के साथ लागू किया गया। जब ईवेंट कतार को एक ईवेंट प्राप्त होता है, तो थ्रेड अनब्लॉक होता है और ईवेंट को इस थ्रेड से जुड़े राज्य मशीन द्वारा संसाधित किया जाता है। (यह अच्छी तरह से ज्ञात सक्रिय ऑब्जेक्ट कंप्यूटिंग मॉडल है।)

  • इवेंट कतार सक्रिय ऑब्जेक्ट थ्रेड के स्वामित्व में हैं।

  • प्रत्येक धागा पूरे श्रेणीबद्ध राज्य मशीन है, इसलिए यह राज्यों "सक्रिय" या "निष्क्रिय '। श्रेणीबद्ध राज्य मशीनों (यूएमएल statecharts) हो सकता है आप उच्च स्तर राज्य में कार्यों और संक्रमण और इस पुन: उपयोग निर्दिष्ट करने देते हैं नेस्टेड राज्यों में व्यवहार। यह राज्य के संक्रमण "विस्फोट" आप पारंपरिक FSMs साथ है counteracts।

+0

यह बेहद दिलचस्प और प्रासंगिक दिखता है, धन्यवाद! – blueshift