2011-08-09 19 views
14

मैं एक प्रेषण कतार के लिए एक सी फ़ाइल बना रहा हूं जो एक कार्य प्राप्त करता है और इसे एक कतार में डालता है जो लिंक की गई सूची है। ऐसा करने के लिए में, मैंसी, pthread_create फ़ंक्शन का उपयोग करके थ्रेड कैसे बनाएं

pthread_t cThread; 
if(pthread_create(&cThread, NULL, work, param)){ 
    perror("ERROR creating thread."); 
} 

का उपयोग कर फिर भी मैं एक समारोह है कि 'काम' और समारोह बनाने के मापदंडों के रूप में 'परम' चर में चला जाता है बनाने की जरूरत है धागे बनाने के लिए की जरूरत है। मेरे दोस्त ने मुझे बताया कि मुझे केवल उस कार्य फ़ंक्शन में कोई कोड डालना होगा जो असीमित रूप से लूप करता है, इसलिए थ्रेड मर नहीं जाता है .. क्या कोई भी प्रत्येक पैरामीटर को pthread_create फ़ंक्शन में ले जा सकता है- खासकर work और param के लिए? मैं इस के लिए गूगल खोज की, लेकिन ट्यूटोरियल के सबसे क्रम में इतना अवधारणा को समझने के लिए कड़ी मेहनत कर रहे हैं ...

+0

http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_create.html – miku

+0

हाँ मैंने इसे पढ़ा है। मैं सिर्फ किसी को वाक्यों में व्याख्या करना चाहता हूं- – Leanne

उत्तर

23

pthread_create करने के लिए चार मापदंड हैं,:

  1. एक pthread_t संरचना करने के लिए एक सूचक है, जो pthread_create यह बनाता है कि धागे पर जानकारी के साथ भर जाएगा।

  2. धागे के पैरामीटर के साथ pthread_attr_t पर एक सूचक। आप सुरक्षित रूप से NULL अधिकतर सुरक्षित रूप से पास कर सकते हैं।

  3. धागे में चलाने के लिए एक फ़ंक्शन। फ़ंक्शन को void * वापस करना होगा और void * तर्क लेना होगा, जिसका उपयोग आप फिट देख सकते हैं। (उदाहरण के लिए, यदि आप एक ही फ़ंक्शन के साथ एकाधिक थ्रेड शुरू कर रहे हैं, तो आप इन पैरामीटर को अलग करने के लिए उपयोग कर सकते हैं।)

  4. void * कि आप थ्रेड को शुरू करना चाहते हैं। यदि आपको इसकी आवश्यकता नहीं है तो NULL पास करें।

16

स्पष्ट duskwuff का जवाब:

work पैरामीटर एक समारोह सूचक है। फ़ंक्शन को एक तर्क लेना चाहिए जिसे void * टाइप किया गया है और void * पर वापसी मान।

paramwork डेटा प्राप्त करने के लिए एक सूचक होने की उम्मीद है।

उदाहरण के तौर पर, मान लें कि आप कार्यकर्ता को दो int पास करना चाहते हैं। उसके बाद, आप कुछ इस तरह बना सकते हैं:

int *param = (int *)malloc(2 * sizeof(int)); 
param[0] = 123; 
param[1] = 456; 
pthread_create(&cThread, NULL, work, param); 

फिर अपने काम समारोह सूचक प्रकार बदलने और परम डेटा हड़पने कर सकते हैं:

void *work(void * parm) { 
    int *param = (int *)parm; 
    int first_val = param[0]; 
    .... 
} 

आप और अधिक जटिल सामान कर सकते हैं, के साथ एक struct बनाने की तरह आपको प्राप्त होने वाले सभी डेटा।

+6

के लिए प्रत्येक पैरामीटर क्या है कृपया 'malloc' से वापसी मान डालें। इसकी वापसी 'शून्य * है और हमेशा किसी भी डेटा सूचक के लिए असाइन किया जा सकता है। 'परम' के लिए भी चला जाता है। –

+0

@ जेन्स खराब आदत सी ++ से: / –

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