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

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


समस्या विवरण

दिए गए थ्रेड्स के आधार पर प्रोग्राम को उनकी प्राथमिकताओं के आधार पर 0 से 10 तक प्रिंट करना होगा।

थ्रेड क्या है?

थ्रेड एक हल्की प्रक्रिया है जो प्रोग्राम के अंदर चलती है। एक साधारण प्रोग्राम में n संख्या में थ्रेड हो सकते हैं।

यह हमारे प्रोग्राम में कैसे काम करता है?

थ्रेड फ़ंक्शन का उपयोग करने के लिए हम #include <pthread.h> हेडर फ़ाइल का उपयोग करते हैं। इस हेडर फ़ाइल में हमारे प्रोग्राम में थ्रेड से संबंधित सभी फ़ंक्शन शामिल होते हैं जैसे pthread_create(), आदि।

एल्गोरिदम

शुरुआत
चरण 1: ग्लोबल वेरिएबल घोषित करें MAX=10 और count=1
चरण 2: thr को pthread_mutex_t और cond को pthread_cond_t के रूप में घोषित करें
चरण 3: void *even(void *arg) फंक्शन घोषित करें
    जब तक (count < MAX) लूप
        pthread_mutex_lock(&thr) कॉल करें
        जब तक (count % 2 != 0) लूप
            pthread_cond_wait(&cond, &thr) कॉल करें
        अंत
        count++ प्रिंट करें
        pthread_mutex_unlock(&thr) कॉल करें
        pthread_cond_signal(&cond) कॉल करें
    अंत
    pthread_exit(0) कॉल करें
चरण 4: void *odd(void *arg) फंक्शन घोषित करें
    जब तक (count < MAX) लूप
        pthread_mutex_lock(&thr) कॉल करें
        जब तक (count % 2 != 1) लूप
            pthread_cond_wait(&cond, &thr) कॉल करें
        अंत
        count++ प्रिंट करें
        pthread_mutex_unlock(&thr) कॉल करें
        pthread_cond_signal(&cond) कॉल करें
    अंत
    pthread_exit(0) सेट करें
चरण 5: main() में
    pthread_t thread1 और pthread_t thread2 बनाएं
    pthread_mutex_init(&thr, 0) कॉल करें
    pthread_cond_init(&cond, 0) कॉल करें
    pthread_create(&thread1, 0, &even, NULL) कॉल करें
    pthread_create(&thread2, 0, &odd, NULL) कॉल करें
    pthread_join(thread1, 0) कॉल करें
    pthread_join(thread2, 0) कॉल करें
    pthread_mutex_destroy(&thr) कॉल करें
    pthread_cond_destroy(&cond) कॉल करें
रोकें

C प्रोग्राम उदाहरण

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

int MAX = 10;
int count = 1;
pthread_mutex_t thr;
pthread_cond_t cond;

void *even(void *arg){
    while(count < MAX) {
        pthread_mutex_lock(&thr);
        while(count % 2 != 0) {
            pthread_cond_wait(&cond, &thr);
        }
        printf("%d ", count++);
        pthread_mutex_unlock(&thr);
        pthread_cond_signal(&cond);
    }
    pthread_exit(0);
}

void *odd(void *arg){
    while(count < MAX) {
        pthread_mutex_lock(&thr);
        while(count % 2 != 1) {
            pthread_cond_wait(&cond, &thr);
        }
        printf("%d ", count++);
        pthread_mutex_unlock(&thr);
        pthread_cond_signal(&cond);
    }
    pthread_exit(0);
}

int main(){
    pthread_t thread1;
    pthread_t thread2;
    pthread_mutex_init(&thr, 0);
    pthread_cond_init(&cond, 0);
    pthread_create(&thread1, 0, &even, NULL);
    pthread_create(&thread2, 0, &odd, NULL);
    pthread_join(thread1, 0);
    pthread_join(thread2, 0);
    pthread_mutex_destroy(&thr);
    pthread_cond_destroy(&cond);
    return 0;
}

आउटपुट

उपरोक्त प्रोग्राम चलाने पर निम्नलिखित आउटपुट उत्पन्न होगा:

1 2 3 4 5 6 7 8 9 10
  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 प्रोग्राम में O(1) एक्स्ट्रा स्पेस का उपयोग करके n x n स्पाइरल मैट्रिक्स प्रिंट करना C प्रोग्राम में O(1) एक्स्ट्रा स्पेस का उपयोग करके n x n स्पाइरल मैट्रिक्स प्रिंट करना

    हमें एक पॉजिटिव इंटीजर n दिया गया है और केवल O(1) एक्स्ट्रा स्पेस का उपयोग करके क्लॉकवाइज दिशा में n x n का स्पाइरल मैट्रिक्स बनाना है। स्पाइरल मैट्रिक्स एक मैट्रिक्स है जो स्पाइरल की तरह काम करता है जो एक सर्कल के मूल से शुरू होकर क्लॉकवाइज फैशन में घूमता है। इसलिए कार्य O(1) स्पेस का उपयोग करके

  1. C प्रोग्राम में मैट्रिक्स में विकर्ण पैटर्न में संख्याएं प्रिंट करना C प्रोग्राम में मैट्रिक्स में विकर्ण पैटर्न में संख्याएं प्रिंट करना

    कार्य n x n मैट्रिक्स को विकर्ण पैटर्न में प्रिंट करना है। यदि n 3 है तो विकर्ण पैटर्न में मैट्रिक्स प्रिंट करना है: इसलिए आउटपुट इस तरह होगा: उदाहरण इनपुट: 3 आउटपुट: 1 2 4 3 5 7 6 8 9 इनपुट: 4 आउटपुट: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 समस्या सुझाव देती है कि हमें एक स