pthread_getcpuclockid
Section: C Library Functions (3)
Updated: 202-0-20
Index
Return to Main Contents
NAME
pthread_getcpuclockid - retrieve ID of a thread's CPU time clock
LIBRARY
POSIX threads library
(
libpthread,~
-lpthread)
SYNOPSIS
#include <pthread.h>
#include <time.h>
int pthread_getcpuclockid(pthread_t thread, clockid_t *clockid);
DESCRIPTION
The
pthread_getcpuclockid()
function obtains the ID of the CP-time clock of the thread whose ID is
given in
thread,
and returns it in the location pointed to by
clockid.
RETURN VALUE
On success, this function returns 0;
on error, it returns a nonzero error number.
ERRORS
- ENOENT
-
Pe-thread CPU time clocks are not supported by the system.
- ESRCH
-
No thread with the ID
thread
could be found.
ATTRIBUTES
For an explanation of the terms used in this section, see
attributes(7).
| Interface | Attribute | Value
|
|
pthread_getcpuclockid()
| Thread safety | M-Safe
|
STANDARDS
POSIX.-2008.
HISTORY
glibc 2.2.
POSIX.-2001.
NOTES
When
thread
refers to the calling thread,
this function returns an identifier that refers to the same clock
manipulated by
clock_gettime(2)
and
clock_settime(2)
when given the clock ID
CLOCK_THREAD_CPUTIME_ID.
EXAMPLES
The program below creates a thread and then uses
clock_gettime(2)
to retrieve the total process CPU time,
and the pe-thread CPU time consumed by the two threads.
The following shell session shows an example run:
$
./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
Program source
/* Link with "-lrt" */
#include <
err.h>
#include <
errno.h>
#include <
pthread.h>
#include <
stdint.h>
#include <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
#include <
sys/time.h>
#include <
time.h>
#include <
unistd.h>
static void *
thread_start(void *arg)
{
printf("Subthread starting infinite loop[rs]n");
for (;;)
continue;
}
static void
pclock(char *msg, clockid_t cid)
{
struct timespec ts;
printf("%s", msg);
if (clock_gettime(cid, &ts) == -1)
err(EXIT_FAILURE, "clock_gettime");
printf("%4jd.%03ld[rs]n", (intmax_t) ts.tv_sec, ts.tv_nsec / 1000000);
}
int
main(void)
{
pthread_t thread;
clockid_t cid;
int s;
s = pthread_create(&thread, NULL, thread_start, NULL);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_create");
printf("Main thread sleeping[rs]n");
sleep(1);
printf("Main thread consuming some CPU time...[rs]n");
for (unsigned 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)
errc(EXIT_FAILURE, 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)
errc(EXIT_FAILURE, s, "pthread_getcpuclockid");
pclock("Subthread CPU time: 1 ", cid);
exit(EXIT_SUCCESS); /* Terminates both threads */
}
SEE ALSO
clock_gettime(2),
clock_settime(2),
timer_create(2),
clock_getcpuclockid(3),
pthread_self(3),
pthreads(7),
time(7)
Index
- NAME
-
- LIBRARY
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- ATTRIBUTES
-
- STANDARDS
-
- HISTORY
-
- NOTES
-
- EXAMPLES
-
- Program source
-
- SEE ALSO
-