C Academy · पाठ

सिंक्रोनाइज़ेशन और रेस कंडीशन

साझा संसाधनों को सुरक्षित रूप से प्रबंधित करने के लिए म्यूटेक्स और सेमाफ़ोर लागू कीजिए

पाठ 3, कुल 3 में से10 चरण

सिंक्रोनाइज़ेशन और रेस कंडीशन, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 3 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

सिंक्रोनाइज़ेशन और रेस कंडीशन

जब कई थ्रेड साझा संसाधनों तक पहुँचते हैं, तो रेस कंडीशन उत्पन्न हो सकती हैं, जिससे अप्रत्याशित परिणाम मिलते हैं।

इस पाठ में आप सीखेंगे:

  • रेस कंडीशन क्या होती हैं और वे कैसे उत्पन्न होती हैं।
  • रेस कंडीशन रोकने के लिए म्यूटेक्स का उपयोग कैसे करें।
  • साझा संसाधनों को प्रबंधित करने में सेमाफ़ोर कैसे मदद करते हैं।
सिंक्रोनाइज़ेशन और रेस कंडीशन — चित्र 1

रेस कंडीशन क्या है

रेस कंडीशन तब उत्पन्न होती है जब कई थ्रेड एक ही समय में साझा डेटा तक पहुँचते हैं, जिससे अप्रत्याशित व्यवहार होता है।

उदाहरण:

  • दो थ्रेड किसी वैश्विक गणक को अपडेट करने का प्रयास करते हैं।
  • आपसी हस्तक्षेप के कारण अंतिम मान गलत हो सकता है।

उदाहरण: मल्टीथ्रेडिंग में रेस कंडीशन

यह प्रोग्राम एक ऐसी रेस कंडीशन दिखाता है जिसमें कई थ्रेड किसी साझा चर को बदलते हैं।

#include <stdio.h>
#include <pthread.h>

int counter = 0;

void *incrementCounter(void *arg) {
    for (int i = 0; i < 1000000; i++) {
        counter++;
    }
    return NULL;
}

int main() {
    pthread_t t1, t2;
    pthread_create(&t1, NULL, incrementCounter, NULL);
    pthread_create(&t2, NULL, incrementCounter, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    printf("Final counter value: %d\n", counter);
    return 0;
}

म्यूटेक्स से रेस कंडीशन रोकना

म्यूटेक्स (पारस्परिक बहिष्करण) यह सुनिश्चित करता है कि एक समय में केवल एक थ्रेड किसी संसाधन तक पहुँच सके।

म्यूटेक्स फ़ंक्शन:

  • pthread_mutex_init() - म्यूटेक्स को प्रारंभ करता है।
  • pthread_mutex_lock() - म्यूटेक्स को लॉक करता है।
  • pthread_mutex_unlock() - म्यूटेक्स को अनलॉक करता है।
  • pthread_mutex_destroy() - म्यूटेक्स को नष्ट करता है।

उदाहरण: रेस कंडीशन रोकने के लिए म्यूटेक्स का उपयोग

यह प्रोग्राम साझा गणक तक पहुँच को नियंत्रित करने के लिए म्यूटेक्स का उपयोग करके रेस कंडीशन को ठीक करता है।

#include <stdio.h>
#include <pthread.h>

int counter = 0;
pthread_mutex_t lock;

void *incrementCounter(void *arg) {
    for (int i = 0; i < 1000000; i++) {
        pthread_mutex_lock(&lock);
        counter++;
        pthread_mutex_unlock(&lock);
    }
    return NULL;
}

int main() {
    pthread_t t1, t2;
    pthread_mutex_init(&lock, NULL);
    pthread_create(&t1, NULL, incrementCounter, NULL);
    pthread_create(&t2, NULL, incrementCounter, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    pthread_mutex_destroy(&lock);
    printf("Final counter value: %d\n", counter);
    return 0;
}

सेमाफ़ोर क्या है

सेमाफ़ोर एक ऐसा गणक है जिसका उपयोग संसाधनों तक पहुँच को नियंत्रित करने के लिए किया जाता है।

मुख्य फ़ंक्शन:

  • sem_init() - सेमाफ़ोर को प्रारंभ करता है।
  • sem_wait() - सेमाफ़ोर का मान घटाता है।
  • sem_post() - सेमाफ़ोर का मान बढ़ाता है।
  • sem_destroy() - सेमाफ़ोर को नष्ट करता है।

उदाहरण: सिंक्रोनाइज़ेशन के लिए सेमाफ़ोर का उपयोग

यह प्रोग्राम साझा संसाधन तक पहुँच को प्रबंधित करने के लिए सेमाफ़ोर का उपयोग करता है।

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>

sem_t sem;

void *task(void *arg) {
    sem_wait(&sem);
    printf("Thread %d is executing\n", *(int *)arg);
    sem_post(&sem);
    return NULL;
}

int main() {
    pthread_t t1, t2;
    int id1 = 1, id2 = 2;
    sem_init(&sem, 0, 1);
    pthread_create(&t1, NULL, task, &id1);
    pthread_create(&t2, NULL, task, &id2);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    sem_destroy(&sem);
    return 0;
}

थ्रेड सिंक्रोनाइज़ेशन के सर्वोत्तम अभ्यास

रेस कंडीशन से बचने के लिए:

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

सारांश

इस पाठ में आपने सीखा:

  • रेस कंडीशन क्या होती हैं और वे कैसे उत्पन्न होती हैं।
  • रेस कंडीशन रोकने के लिए म्यूटेक्स का उपयोग कैसे करें।
  • साझा संसाधनों तक पहुँच प्रबंधित करने में सेमाफ़ोर कैसे मदद करते हैं।

यह C में मल्टीथ्रेडिंग और समवर्ती निष्पादन वाले अनुभाग का समापन है!

सिंक्रोनाइज़ेशन और रेस कंडीशन — चित्र 10
शुरुआत निःशुल्क

एआई शिक्षक के साथ C सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
39
पाठ
144

अक्सर पूछे जाने वाले प्रश्न

क्या “सिंक्रोनाइज़ेशन और रेस कंडीशन” पाठ निःशुल्क है?

हाँ—“सिंक्रोनाइज़ेशन और रेस कंडीशन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“सिंक्रोनाइज़ेशन और रेस कंडीशन” में मैं क्या सीखूँगा?

साझा संसाधनों को सुरक्षित रूप से प्रबंधित करने के लिए म्यूटेक्स और सेमाफ़ोर लागू कीजिए आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 3वाँ पाठ है।

“सिंक्रोनाइज़ेशन और रेस कंडीशन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. थ्रेड का परिचय
  2. थ्रेड बनाना और प्रबंधित करना
  3. सिंक्रोनाइज़ेशन और रेस कंडीशन
← C Academy पर वापस जाएँ