睡眠功能是睡眠所有线程还是只调用它的人?

Nic*_*ong 7 c multithreading sleep pthreads thread-sleep

我在linux(Centos)上用pthread编程?我想线程睡一会儿等待一些事情.我正在尝试使用sleep(),nanosleep()或者usleep(),或者也许可以做到这一点.我想问一下:睡眠功能是睡眠所有线程还是只是调用它的人?任何建议或参考将不胜感激.

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;
}
Run Code Online (Sandbox Code Playgroud)

我的测试程序:

#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);
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 10

标准拼写它:

sleep()函数将导致调用线程暂停执行,直到....

linux下一个同样明显:

sleep() 让调用线程一直睡到......

然而,有一些错误的参考文献保持不然.用于状态的linux.die.net sleep会导致进程等待.

  • 但sleep()函数似乎使主线程睡眠 (3认同)
  • @NickDong它使**调用线程**睡眠. (2认同)

jal*_*alf 6

只是调用函数的线程。