2 #define _POSIX_PTHREAD_SEMANTICS
15 static volatile sig_atomic_t stop
;
17 static void sighandler (int signr
)
23 static unsigned long hog (unsigned long niters
)
26 while (!stop
&& --niters
)
31 static void err (int status
, const char *fmt
, ...)
34 int errno_code
= errno
;
37 vfprintf (stderr
, fmt
, ap
);
39 fprintf (stderr
, ": %s\n", strerror (errno_code
));
49 unsigned long v
[HIST
];
53 act
.sa_handler
= sighandler
;
54 if (sigemptyset (&act
.sa_mask
)) {
55 err (EXIT_FAILURE
, "sigemptyset failed");
59 it
.it_interval
.tv_sec
= 0;
60 it
.it_interval
.tv_usec
= 1000000 / 1000;
61 it
.it_value
.tv_sec
= 0;
62 it
.it_value
.tv_usec
= 1000000 / 1000;
64 if (sigaction (SIGALRM
, &act
, NULL
)) {
65 err (EXIT_FAILURE
, "sigaction failed");
68 if (setitimer (ITIMER_REAL
, &it
, NULL
)) {
69 err (EXIT_FAILURE
, "setitimer failed");
73 for (i
= 0; i
< HIST
; ++i
) {
74 v
[i
] = ULONG_MAX
- hog (ULONG_MAX
);
77 for (i
= 0; i
< HIST
; ++i
) {
78 printf ("%d = %ld\n", i
, v
[i
]);
84 if (sigemptyset (&set
)) {
85 err (EXIT_FAILURE
, "sigemptyset failed");
88 if (sigaddset (&set
, SIGALRM
)) {
89 err (EXIT_FAILURE
, "sigaddset failed");
96 if (sigwait (&set
, &signr
)) {
97 err (EXIT_FAILURE
, "sigwait failed");