2008-10-13 7 views
5

मैं अपने बेल्ट के नीचे कुछ सालों के साथ एक तरह का नौसिखिया डेवलपर हूं। हाल ही में मैंने एक गेम कंपनी में साक्षात्कार लिया और पूछा गया "क्या आपने कोई बहु-थ्रेडिंग किया है?" मैंने उन्हें कुछ थ्रेड के साथ सी # ऐप रखने के बारे में बताया ... और फिर मैंने एसक्यूएल में लेनदेन और लॉकिंग आदि के बारे में कुछ कहा। साक्षात्कारकर्ता ने विनम्रता से मुझे बताया कि यह बहुत उच्च स्तर था और वे सी ++ में बहु-थ्रेडिंग करने वाले अनुभव वाले किसी व्यक्ति की तलाश में हैं।सी ++ में "निम्न-स्तर" बहु-थ्रेडिंग का मूल उदाहरण क्या है?

तो सी ++ में "निम्न-स्तर" बहु-थ्रेडिंग का मूल उदाहरण क्या है?

+1

सी #? आप उसे बता सकते हैं कि आपने जावा को प्राथमिकता दी है;) – paxos1977

उत्तर

12

"निम्न स्तर धागे" का कैननिकल कार्यान्वयन pthreads है। आमतौर पर pthreads के साथ सिखाए जाने वाले थ्रेडिंग समस्याओं के सबसे बुनियादी उदाहरण readers and writers problem के कुछ रूप हैं। वह पृष्ठ उत्पादकों/उपभोक्ताओं और डाइनिंग दार्शनिकों जैसे अधिक शास्त्रीय थ्रेडिंग समस्याओं से भी जुड़ा हुआ है।

2

मैं http://zthread.sourceforge.net/ पर एक नज़र डालें जो PThreads लाइब्रेरी के आसपास एक उत्कृष्ट रैपर है। यह एक बहुत तेज और स्थिर है और बल्कि निम्न स्तर की लाइब्रेरी हो सकती है। बहुत अच्छी तरह से लिखा और दस्तावेज।

2

मुझे नहीं लगता कि आप क्या कर रहे हैं और ईमानदार होने के लिए, pthreads का उपयोग करके बहुत अंतर है। यदि आपने धागे के साथ काम की एक बड़ी मात्रा में काम किया है तो आपको लॉकिंग, सिंक्रनाइज़ेशन इत्यादि के साथ सभी मुद्दों का सामना करना पड़ेगा, और आसानी से पर्याप्त आसानी से पठ्रेड कॉल का उपयोग करके उठा सकते हैं। एक चीज जो थोड़ा मुश्किल है जिसे आप शायद समाप्त कर चुके हैं, समाप्त हो गया है, धागे से निकास कोड प्राप्त करना आदि

(बेशक, pthreads उतना कम स्तर नहीं है जितना आप प्राप्त कर सकते हैं; यदि आप हैं लिनक्स पर, यह देखने के लिए क्लोन() देखें कि यह वास्तव में सिस्टम कॉल स्तर पर कैसे काम करता है। लेकिन वास्तव में कोई भी इसका उपयोग तब तक नहीं करता जब तक कि वे pthreads को कार्यान्वित नहीं कर लेते हैं।)

3

कुछ लोगों के आधार पर pthreads का उपयोग करने का एक त्वरित उदाहरण यहां दिया गया है हमारे परीक्षण कोड। यह दो धागे पैदा करता है, और उन्हें पूरा करने के लिए इंतजार कर रहा है।

int main(void) 
{ 
    pthread_t reader, writer; 
    void *arg; 

    // [... initialisation ...] 

    // Spawn threads 
    if(pthread_create(&reader, NULL, reader_func, arg) || 
     pthread_create(&writer, NULL, writer_func, arg)) 
    { 
     perror("pthread_create"); 
     return EX_OSERR; 
    } 

    // Wait while threads run 
    pthread_join(reader, &arg); 
    pthread_join(reader, &arg); 

    return EX_OK; 
} 

void *reader_func(void *arg) 
{ 
    // [... do some stuff ...] 
    return NULL; 
} 

void *writer_func(void *arg) 
{ 
    // [... do some different stuff ...] 
    return NULL; 
} 
1

अच्छी तरह से करता है, तो क्या तुम सच में "अधिकतम" करने के लिए इस विचार लेने के लिए चाहते हैं और आप अपने हाथ धागे के साथ गंदे पाने के लिए तैयार हैं। मैं एक उपयोगकर्ता अंतरिक्ष धागा पुस्तकालय को लागू करने की कोशिश करने की सिफारिश करेंगे।

uconext.h और इसकी विभिन्न प्रक्रियाओं (setcontext, swapcontext और makecontext) में देखें और उनके साथ एक सरल सहकारी थ्रेड लाइब्रेरी लिखने का प्रयास करें। लागू ताले, हालत चर धागा निर्माण/विनाश और सहकारी उपज। यह विशेष रूप से फैंसी नहीं होगा (यानी कोई वास्तविक समांतरता नहीं है (इसके लिए आपको क्लोन सिस्टम कॉल या कर्नेल में खुदाई करने की आवश्यकता है) लेकिन यदि आप इसे कर सकते हैं तो कोई भी यह नहीं कह पाएगा कि आपके पास कम नहीं है स्तर का अनुभव

बस परियोजना के पैमाने की भावना देने के लिए। मैंने सी ++ की लगभग 500 लाइनों में इतनी सरल थ्रेड लाइब्रेरी लिखी, और इस पर विचार किया कि उनमें से कम से कम 20% टिप्पणियां थीं, बयान और लॉगिंग डिबगिंग उद्देश्यों के लिए।

3

वह शायद सी #, नहीं अपने सूत्रण अनुभव के आपके उपयोग का जिक्र किया गया था।

1

इसके अलावा Boost Threads pthreads और Windows धागे के आसपास काफी पोर्टेबल आवरण है ... और जो मैंने सुना है उससे कई गेम देव दुकानें सी ++ का उपयोग करती हैं और कुछ बूस्ट पुस्तकालयों की तरह।

"मैं एक बहु-ऐ दिनचर्या कि उपलब्ध CPU संसाधनों के बीच NPCs के लिए निर्णय पेड़ गणना आवंटित कार्यान्वित:

3

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

(मैंने यह सब किया है, मैंने व्यक्तिगत रूप से वास्तव में ऐसा नहीं किया है grin)

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