p_bench_mutex.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== p_bench_mutex.c =================================================
  2.  * Copyright (c) 1993 by Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Benchmark mutex lock and unlock times
  5.  *
  6.  *  1.00 93/11/08 proven
  7.  *      -Started coding this file.
  8.  */
  9. #include <errno.h>
  10. #include <pthread.h>
  11. #include <stdio.h>
  12. #define OK 0
  13. #define NOTOK  -1
  14. /* ==========================================================================
  15.  * usage();
  16.  */
  17. void usage(void)
  18. {
  19. printf("getopt [-d?] [-c count]n");
  20.     errno = 0;
  21. }
  22. main(int argc, char **argv)
  23. {
  24. struct timeval starttime, endtime;
  25. pthread_mutex_t lock;
  26. int count = 1000000;
  27. int debug = 0;
  28. int i;
  29. char word[256];
  30.     /* Getopt variables. */
  31.     extern int optind, opterr;
  32.     extern char *optarg;
  33. pthread_init();
  34. while ((word[0] = getopt(argc, argv, "c:d?")) != (char)EOF) {
  35. switch (word[0]) {
  36. case 'd':
  37. debug++;
  38. break;
  39. case 'c':
  40. count = atoi(optarg);
  41. break;
  42. case '?':
  43. usage();
  44. return(OK);
  45. default:
  46. usage();
  47. return(NOTOK);
  48. }
  49. }
  50. pthread_mutex_init(&lock, NULL);
  51. if (gettimeofday(&starttime, NULL)) {
  52.   perror ("gettimeofday");
  53.   return 1;
  54. }
  55. for (i = 0; i < count; i++) {
  56. pthread_mutex_lock(&lock);
  57. pthread_mutex_unlock(&lock);
  58. }
  59. if (gettimeofday(&endtime, NULL)) {
  60.   perror ("gettimeofday");
  61.   return 1;
  62. }
  63. printf("%d mutex locks/unlocks no contention took %d usecs.n", count, 
  64. (endtime.tv_sec - starttime.tv_sec) * 1000000 +
  65. (endtime.tv_usec - starttime.tv_usec));
  66. return 0;
  67. }