"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > सरल कांटा () लूप दो के बजाय आठ बिंदु क्यों उत्पन्न करता है?

सरल कांटा () लूप दो के बजाय आठ बिंदु क्यों उत्पन्न करता है?

2024-11-12 को प्रकाशित
ब्राउज़ करें:609

Why does the simple fork() loop produce eight dots instead of two?

fork() में अप्रत्याशित ब्रांचिंग का उत्सुक मामला

निम्न कोड स्निपेट पर विचार करें जो चाइल्ड प्रोसेस बनाने के लिए fork() प्रिमिटिव का उपयोग करता है:

#include 
#include 
#include 

int main(void)
{
    int i;
    for(i = 0; i 

आश्चर्यजनक रूप से, इस कार्यक्रम को निष्पादित करने से आठ आउटपुट डॉट्स मिलते हैं, जो कि आपके आरंभिक अनुमान से छह अधिक है। ऐसा क्यों होता है?

छिपी प्रक्रियाओं का अनावरण

इस रहस्य को जानने के लिए, आइए फोर्क() के संचालन के बारे में गहराई से जानें। fork() वर्तमान प्रक्रिया की एक प्रतिकृति बनाता है, जिसके परिणामस्वरूप एक अभिभावक और एक संतान प्रक्रिया होती है।

प्रारंभ में, एक एकल प्रक्रिया होती है, जो दो में विभाजित होती है। ये दोनों प्रक्रियाएं हर बार एक बिंदु प्रिंट करते हुए, लूप के लिए क्रमिक रूप से निष्पादित होती हैं। दूसरे पुनरावृत्ति पर, प्रत्येक प्रक्रिया फिर से द्विभाजित होती है, जिससे कुल चार प्रक्रियाएँ बनती हैं। ये चार प्रक्रियाएं समाप्त होने से पहले एक बिंदु प्रिंट करती हैं। तुरंत। जब सभी चार प्रक्रियाएं अपने दूसरे बिंदु प्रिंट करती हैं, तो वे बफ़र हो जाते हैं। यह वह जगह है जहां गुप्त प्रभाव उत्पन्न होता है।

फोर्क() पर, बफ़र किए गए बिंदु चाइल्ड प्रक्रियाओं द्वारा विरासत में मिलते हैं। इसलिए, जब प्रत्येक चाइल्ड प्रक्रिया बाहर निकलती है, तो उसका बफ़र किया गया बिंदु आउटपुट स्ट्रीम पर दिखाई देता है। इन चार विलंबित बिंदुओं को मुद्रित चार बिंदुओं में जोड़ने से अप्रत्याशित रूप से आठ की अप्रत्याशित संख्या बनती है। एफफ्लश(स्टडआउट); प्रत्येक printf() कथन के बाद। यह आउटपुट को तुरंत भेजने के लिए बाध्य करता है, जिससे यह सुनिश्चित होता है कि बिंदुओं की अपेक्षित संख्या प्रदर्शित होती है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3