Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

थ्रेड सिंक्रोनाइज़ेशन का उपयोग करके क्रम में संख्याएं प्रिंट करना

यहां हम देखेंगे कि अलग-अलग थ्रेड्स का उपयोग करके संख्याओं को सही क्रम में कैसे प्रिंट किया जाए। यहां हम n संख्या में थ्रेड्स बनाएंगे, फिर उन्हें सिंक्रोनाइज़ करेंगे। विचार यह है कि पहला थ्रेड 1 प्रिंट करेगा, फिर दूसरा थ्रेड 2 प्रिंट करेगा और इसी तरह आगे। जब एक थ्रेड प्रिंट करने का प्रयास करता है, तो यह संसाधन को लॉक कर देगा ताकि कोई अन्य थ्रेड उस भाग का उपयोग न कर सके।

उदाहरण

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

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t* cond = NULL;
int threads;
volatile int count = 0;

void* sync_thread(void* num) {
    // यह फ़ंक्शन थ्रेड्स को सिंक्रोनाइज़ करने के लिए उपयोग किया जाता है
    int thread_number = *(int*)num;
    while (1) {
        pthread_mutex_lock(&mutex); // सेक्शन लॉक करें
        if (thread_number != count) { // यदि थ्रेड नंबर काउंट के समान नहीं है, तो एक को छोड़कर सभी थ्रेड्स को प्रतीक्षा अवस्था में डालें
            pthread_cond_wait(&cond[thread_number], &mutex);
        }
        printf("%d ", thread_number + 1); // थ्रेड नंबर प्रिंट करें
        count = (count + 1) % (threads);
        // अगले थ्रेड को सूचित करें
        pthread_cond_signal(&cond[count]);
        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

int main() {
    pthread_t* thread_id;
    volatile int i;
    int* thread_arr;
    printf("\nथ्रेड्स की संख्या दर्ज करें: ");
    scanf("%d", &threads);
    // कंडीशनल वेरिएबल, थ्रेड आईडी और थ्रेड्स के आकार की सरणी के लिए मेमोरी आवंटित करें
    cond = (pthread_cond_t*)malloc(sizeof(pthread_cond_t) * threads);
    thread_id = (pthread_t*)malloc(sizeof(pthread_t) * threads);
    thread_arr = (int*)malloc(sizeof(int) * threads);
    for (i = 0; i < threads; i++) { // थ्रेड्स बनाएं
        thread_arr[i] = i;
        pthread_create(&thread_id[i], NULL, sync_thread, (void*)&thread_arr[i]);
    }
    // थ्रेड की प्रतीक्षा
    for (i = 0; i < threads; i++) {
        pthread_join(thread_id[i], NULL);
    }
    return 0;
}

आउटपुट

$ g++ test.cpp -lpthread
$ ./a.out
थ्रेड्स की संख्या दर्ज करें: 5
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 ...
  1. C में संख्याओं को कॉलम-वार प्रिंट करने का प्रोग्राम C में संख्याओं को कॉलम-वार प्रिंट करने का प्रोग्राम

    प्रोग्राम विवरण नीचे दिखाए अनुसार प्राकृतिक संख्याओं को कॉलम-वार प्रिंट करें: 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 एल्गोरिदम i पंक्तियों के लिए और j कॉलम के लिए है 5 का अर्थ 5 पंक्तियों और कॉलम के लिए पैटर्न बनाना है प्रत्येक पंक्ति (i) के लिए लूप K को i से आरंभ करें प्रत्येक कॉलम (j) के लिए लूप वर

  1. C में गैर-वर्ग संख्याएँ (Non-Square Numbers) प्रिंट करने का प्रोग्राम C में गैर-वर्ग संख्याएँ (Non-Square Numbers) प्रिंट करने का प्रोग्राम

    प्रोग्राम विवरण किसी संख्या का वर्ग वह संख्या होती है जिसे स्वयं से गुणा किया जाता है। एक वर्ग संख्या या परफेक्ट स्क्वायर एक पूर्णांक है जो किसी पूर्णांक का वर्ग होता है। परफेक्ट स्क्वायर पूर्ण संख्याओं के वर्ग होते हैं: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 1 से 100 तक के सभी परफेक्ट स्क्वायर के व

  1. - Python में सूची प्रिंट करना

    Python में सूची प्रिंट करना सूची तत्वों का एक क्रम है। क्रम में कोई भी तत्व क्रम में उसकी स्थिति द्वारा एक्सेसिबल है। इंडेक्स 0 से शुरू होता है। इसलिए list[2] इंडेक्स 2 पर तत्व लौटाएगा, सूची में तीसरा यानी 50।