PTHREAD_GETCPUCLOCKID

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

pthread_getcpuclockid - スレッドの CPU 時間時計の ID を取得する  

書式

#include <pthread.h>
#include <time.h>

int pthread_getcpuclockid(pthread_t thread, clockid_t *clockid);

-pthread でコンパイルしてリンクする。
 

説明

The pthread_getcpuclockid() function obtains the ID of the CPU-time clock of the thread whose ID is given in thread, and returns it in the location pointed to by clockid.  

返り値

成功すると、この関数は 0 を返す。 エラーの場合、 0 以外のエラー番号を返す。  

エラー

ENOENT
スレッド単位の CPU 時間時計はこのシステムではサポートされていない。
ESRCH
ID が thread のスレッドが見つからなかった。
 

バージョン

この関数は glibc バージョン 2.2 以降で利用できる。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
pthread_getcpuclockid() Thread safety MT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008.  

注意

thread が呼び出したスレッドを参照している場合、 クロック ID CLOCK_THREAD_CPUTIME_ID が指定されていれば、 clock_gettime(2) と clock_settime(2) が操作するのと同じ時計 を参照する ID が返される。  

例

以下のプログラムは、スレッドを作成し、それから clock_gettime(2) を使ってプロセス全体の CPU 時間を取得し、 pthread_getcpuclockid(3) を使って 2 つのスレッドが消費した スレッド毎の CPU 時間を取得する。 下記のシェルのセッションは実行例である。

$ ./a.out Main thread sleeping Subthread starting infinite loop Main thread consuming some CPU time... Process total CPU time: 1.368 Main thread CPU time: 0.376 Subthread CPU time: 0.992  

プログラムのソース

/* "-lrt" でリンクする */

#include <time.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <string.h> #include <errno.h>

#define handle_error(msg) \
        do { perror(msg); exit(EXIT_FAILURE); } while (0)

#define handle_error_en(en, msg) \
        do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

static void * thread_start(void *arg) {
    printf("Subthread starting infinite loop\n");
    for (;;)
        continue; }

static void pclock(char *msg, clockid_t cid) {
    struct timespec ts;


    printf("%s", msg);
    if (clock_gettime(cid, &ts) == -1)
        handle_error("clock_gettime");
    printf("%4jd.%03ld\n", (intmax_t) ts.tv_sec, ts.tv_nsec / 1000000); }

int main(int argc, char *argv[]) {
    pthread_t thread;
    clockid_t cid;
    int s;


    s = pthread_create(&thread, NULL, thread_start, NULL);
    if (s != 0)
        handle_error_en(s, "pthread_create");


    printf("Main thread sleeping\n");
    sleep(1);


    printf("Main thread consuming some CPU time...\n");
    for (int j = 0; j < 2000000; j++)
        getppid();


    pclock("Process total CPU time: ", CLOCK_PROCESS_CPUTIME_ID);


    s = pthread_getcpuclockid(pthread_self(), &cid);
    if (s != 0)
        handle_error_en(s, "pthread_getcpuclockid");
    pclock("Main thread CPU time:   ", cid);


    /* The preceding 4 lines of code could have been replaced by:
       pclock("Main thread CPU time:   ", CLOCK_THREAD_CPUTIME_ID); */


    s = pthread_getcpuclockid(thread, &cid);
    if (s != 0)
        handle_error_en(s, "pthread_getcpuclockid");
    pclock("Subthread CPU time: 1    ", cid);


    exit(EXIT_SUCCESS);         /* Terminates both threads */ }  

関連項目

clock_gettime(2), clock_settime(2), timer_create(2), clock_getcpuclockid(3), pthread_self(3), pthreads(7), time(7)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

pthread   thread   time   getcpuclockid   スレッド   Main   handle   gettime   printf   pclock   時間   Subthread   時計   clockid   clock   exit   create   settime   sleeping   starting   infinite   loop   consuming   Process   total

Linux マニュアル 一覧

関連するコマンド・関数

clock_getcpuclockid.3   pthread_sigmask.3   pthread_cancel.3   pthread_attr_init.3   pthread_cleanup_push.3   pthread_getname_np.3
 

Index

名前
書式
説明
返り値
エラー
バージョン
属性
準拠
注意
例
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:29 GMT, October 11, 2026