निम्नलिखित प्रोग्राम है जो pthreads का उपयोग करता है।एक बहुप्रचारित प्रोग्राम में अप्रत्याशित आउटपुट
#include <pthread.h> // posix threads
#include <stdio.h>
#include <stdlib.h>
/* to compile use -lpthread */
void * sample_thread(void *);
#define MAX 10
int main()
{
pthread_t tid;
pthread_attr_t attr;
int k;
pthread_attr_init(&attr); // set default attributes
pthread_create(&tid, &attr, sample_thread, NULL); // create new thread
// sample_thread will run as the new thread
for(k=0; k<MAX; k++) {
printf("Hi I'am %s %d \n",__func__,k);
}
//this would kill all the threads,
}
void * sample_thread(void * p)
{
int k;
for(k=0; k<MAX; k++) {
printf("Hi I'am %s %d \n",__func__,k);
}
}
हर बार जब मैं इस कार्यक्रम मैं मुख्य थ्रेड से निष्पादन संख्याओं के विभिन्न संख्या और बच्चे धागा (क्योंकि बच्चे से पहले मुख्य थ्रेड हो सकता है निकास) प्राप्त करने के लिए उम्मीद कर रहा हूँ चलाते हैं। मुझे कभी-कभी यह उम्मीद आउटपुट मिल रहा है। लेकिन मुझे निम्नानुसार एक आउटपुट मिला, जिसे मैं समझने में असमर्थ हूं।
Hi I'am main 0
Hi I'am main 1
Hi I'am main 2
Hi I'am main 3
Hi I'am main 4
Hi I'am main 5
Hi I'am main 6
Hi I'am main 7
Hi I'am main 8
Hi I'am main 9
Hi I'am sample_thread 0
Hi I'am sample_thread 0
Hi I'am sample_thread 1
Hi I'am sample_thread 2
Hi I'am sample_thread 3
Hi I'am sample_thread 4
Hi I'am sample_thread 4
Hi I'am sample_thread 5
नमूना धागा 0 और 4 प्रिंट दो बार क्यों किया?
क्या आप हमें बता सकते हैं कि आप किस ओएस का उपयोग कर रहे हैं? आपके प्रोग्राम में कुछ भी गलत नहीं लगता है और मुझे संदेह है कि यह कार्यान्वयन में एक बग हो सकता है (पीओएसआईक्स द्वारा एसटीडीओ ऑपरेशंस के साथ सिंक्रनाइज़ करने के लिए 'निकास' की आवश्यकता है, लेकिन अगर ऐसा करने में असफल रहा, तो डेटा दौड़ हो सकती है (और यादृच्छिक भ्रष्टाचार) जब यह 'stdout'' के साथ एक और थ्रेड लेखन के साथ 'stdout' फ्लश करता है)। –
यह पहले विकल्प के बारे में उबंटू 13.10 – DesirePRG