0

pthreads について学んでいます。スレッドのスコープを設定したいので、スコープを設定するために pthread_attr_setscope() API を使用しましたが、pthread_attr_getscope() API を使用してスレッドのスコープを取得しようとすると、スコープに関係なくすべての方法で 0 が返されます(PROCESS_SCOPE/SYSTEM_SCOPEのいずれか)を設定しました。詳細については、以下のコードを参照してください。

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#define NUM_THREADS     5

void *PrintHello(void *threadid)
{
    long tid;
    tid = (long)threadid;
    printf("Hello World! It's me, thread #%ld!\n", tid);
    pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
    pthread_t threads[NUM_THREADS];
    pthread_attr_t attr;

    int rc; 
    long t;
    int ret=0;
    int mypolicy=-1;
    int iscope=-1;  

    ret = pthread_attr_init (&attr);  

    pthread_attr_setschedpolicy(&attr,SCHED_RR);

    // BOUND behavior - Creating SYSTEM_SCOPE thread 
    ret = pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); 

    //Unbound behaviour - Creating process scope thread
    ret = pthread_attr_setscope(&attr,PTHREAD_SCOPE_PROCESS); 

    for(t=0; t<NUM_THREADS; t++){
        printf("In main: creating thread %ld\n", t);
        rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
        printf("Return code from pthread_create() is %d\n", rc);
        printf("Return value of getschedule policy = %d \n",pthread_attr_getschedpolicy(&attr, &mypolicy));
        printf("policy = %d \n",mypolicy);
        printf("Return value of getscope = %d \n",pthread_attr_getscope(&attr,&iscope));
        printf("scope = %d \n",iscope);

        if (rc){
            printf("ERROR; return code from pthread_create() is %d\n", rc);
            _exit(-1);  
        }
    }   

    pthread_exit(NULL);
}  

設定したスコープ (PROCESS_SCOPE/SYSTEM_SCOPE) に関係なく、「iscope」の値が毎回同じになる理由がわかりません。

4

2 に答える 2