Last active
November 26, 2016 20:27
-
-
Save ericxyan/f14e880bc1bd6c5fd88ca0c649cb3d0e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int main (int argc, char * argv[]) | |
{ | |
/* Method 1 */ | |
if (argc >= 2) { | |
nthreads = atoi(argv[1]); | |
} | |
if (argc >= 3) { | |
niterations = atoi(argv[2]); | |
} | |
if (argc >= 4) { | |
nobjects = atoi(argv[3]); | |
} | |
if (argc >= 5) { | |
work = atoi(argv[4]); | |
} | |
ericxyan/frontend-maven-plugin | |
if (argc >= 6) { | |
size = atoi(argv[5]); | |
} | |
printf ("Running threadtest for %d threads, %d iterations, %d objects, %d work and %d size...\n", nthreads, niterations, nobjects, work, size); | |
/* Method 2 */ | |
static void usage(char **argv) | |
{ | |
printf("usage: %s -h <mserver host name> -p <mserver port> [-f <operations file> -l <log file>]\n", argv[0]); | |
printf("If the operations file (-f) is not specified, the input is read from stdin\n"); | |
printf("If the log file (-l) is not specified, log output is written to stdout\n"); | |
} | |
// Returns false if the arguments are invalid | |
static bool parse_args(int argc, char **argv) | |
{ | |
char option; | |
while ((option = getopt(argc, argv, "h:p:f:l:")) != -1) { | |
switch(option) { | |
case 'h': strncpy(mserver_host_name, optarg, HOST_NAME_MAX); break; | |
case 'p': mserver_port = atoi(optarg); break; | |
case 'f': strncpy(ops_file_name, optarg, PATH_MAX); break; | |
case 'l': strncpy(log_file_name, optarg, PATH_MAX); break; | |
default: | |
fprintf(stderr, "Invalid option: -%c\n", option); | |
return false; | |
} | |
} | |
return (mserver_host_name[0] != '\0') && (mserver_port != 0); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
The program below creates a thread and then uses clock_gettime(2) to | |
retrieve the total process CPU time, and the per-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 <time.h> | |
#include <stdio.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("%4ld.%03ld\n", ts.tv_sec, ts.tv_nsec / 1000000); | |
} | |
int | |
main(int argc, char *argv[]) | |
{ | |
pthread_t thread; | |
clockid_t cid; | |
int j, 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 (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 */ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment