2012-08-11 24 views
7

मैं लिनक्स (Centos) पर pthread के साथ प्रोग्रामिंग कर रहा हूँ? मैं धागे को कुछ इंतजार करने के लिए थोडा समय सोना चाहता हूं। मैं नींद(), नैनोस्लीप(), या नींद() का उपयोग करने की कोशिश कर रहा हूं या शायद कुछ ऐसा कर सकता है। मैं यह पूछना चाहता हूं: क्या नींद के काम सभी धागे सोते हैं या सिर्फ इसे बुलाते हैं? किसी भी सलाह या संदर्भ की सराहना की जाएगी।क्या नींद के काम सभी धागे सोते हैं या सिर्फ इसे कॉल करते हैं?

void *start_routine() { 
    /* I just call sleep functions here */ 
    sleep (1); /* sleep all threads or just the one who call it? 
        what about nanosleep(), usleep(), actually I 
        want the threads who call sleep function can 
        sleep with micro-seconds or mili-seconds. 
       */ 
    ... 
} 

int main (int argc, char **argv) { 
    /* I just create threads here */ 
    pthread_create (... ...); 
    ... 
    return 0; 
} 

मेरे परीक्षण कार्यक्रम:

#define _GNU_SOURCE 
#include <pthread.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sched.h> 
#include <unistd.h> 

void *start_routine (void *j) { 

    unsigned long sum; 
    int i; 
    int jj; 
    jj = (int)j; 
    do { 
     sum = 1; 
     for (i=0; i<10000000; i++) { 
      sum = sum * (sum+i); 
     } 
     if (jj == 0) { 
      printf ("\033[22;33m[jj%d.%ld]\t", jj, sum); 
      sleep(1);   
     } 
     else { 
      printf ("\033[22;34m[jj%d.%ld]\t", jj, sum); 
     } 

    }while (1); 

    pthread_exit((void *)0); 
} 
int main(int argc, char *argv[]) 
{ 
    cpu_set_t cpuset; 
    pthread_t thread[2]; 
    int i; 
    i = 0; 
    CPU_ZERO(&cpuset); 
    CPU_SET(i, &cpuset); 

    pthread_create (&thread[0], NULL, start_routine, (void *)i); 
    pthread_setaffinity_np(thread[0], sizeof(cpu_set_t), &cpuset); 
    i = 1; 
    CPU_ZERO(&cpuset); 
    CPU_SET(i, &cpuset); 
    pthread_create (&thread[1], NULL, start_routine, (void *)i); 
    pthread_setaffinity_np(thread[1], sizeof(cpu_set_t), &cpuset); 
    pthread_exit (NULL); 
} 
+0

केवल कॉलर – bestsss

+1

@ किरील, अपने प्रश्न इतिहास की जांच करें। और यह – bestsss

+0

उत्तर के लिए एक सिंगल लाइनर है जिसका मतलब है "काम", "चेतावनी" नहीं। @bestsss - क्या जांचें? मैंने इस सवाल के बारे में कुछ भी नहीं कहा है, मैंने भी वोट दिया है। –

उत्तर

9

The standard यह मंत्र:

नींद() फ़ंक्शन कारण होगा बुला धागा तक निष्पादन से निलंबित कर दिया हो करने के लिए ....

linux एक बस के रूप में स्पष्ट है :

sleep() कॉलिंग थ्रेड नींद देता है जब तक ...

हालांकि कुछ गलत संदर्भ हैं जो अन्यथा बनाए रखते हैं। linux.die.net sleep को को की स्थिति का इंतजार करने के लिए उपयोग किया जाता है।

+3

लेकिन नींद() फ़ंक्शन मुख्य थ्रेड नींद –

+1

@ निकडोंग यह ** कॉलिंग थ्रेड ** नींद देता है। – cnicutar

+0

धन्यवाद मैं इसे फिर से कोशिश करूंगा। –

3

बस धागा जो फ़ंक्शन को कॉल।

+0

क्या आपने कभी इसके लिए परीक्षण किया है? मेरे परीक्षण कार्यक्रम में, ऐसा लगता है कि मुख्य धागा नींद आती है। –

+0

हां, मैंने इसका परीक्षण किया है। मैंने कार्यों के लिए प्रलेखन भी पढ़ा है। – jalf

+0

@jalf 100% सही है। यदि स्लीप() कॉल मुख्य धागा नींद कर रही है, तो मुख्य धागा सीधे इसे कॉल कर रहा है या किसी अन्य सिग्नल पर इंतजार कर रहा है जो केवल नींद के बाद सोने के थ्रेड द्वारा आपूर्ति की जाती है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^