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

MySQL数据库

开发平台:

Visual C++

  1. /* ==== p_bench_semaphore.c =================================================
  2.  * Copyright (c) 1993 by Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Benchmark semaphore Test and Set/ CLear 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. semaphore lock = SEMAPHORE_CLEAR;
  26. semaphore *lock_addr;
  27. int count = 1000000;
  28. int debug = 0;
  29. int i;
  30. char word[256];
  31.     /* Getopt variables. */
  32.     extern int optind, opterr;
  33.     extern char *optarg;
  34. pthread_init();
  35. while ((word[0] = getopt(argc, argv, "c:d?")) != (char)EOF) {
  36. switch (word[0]) {
  37. case 'd':
  38. debug++;
  39. break;
  40. case 'c':
  41. count = atoi(optarg);
  42. break;
  43. case '?':
  44. usage();
  45. return(OK);
  46. default:
  47. usage();
  48. return(NOTOK);
  49. }
  50. }
  51. lock_addr = &lock;
  52. if (gettimeofday(&starttime, NULL)) {
  53. perror ("gettimeofday");
  54. return 1;
  55. }
  56. for (i = 0; i < count; i++) {
  57. if (SEMAPHORE_TEST_AND_SET(lock_addr)) {
  58. printf("Semaphore already locked errorn");
  59. return 1;
  60. }
  61. SEMAPHORE_RESET(lock_addr);
  62. }
  63. if (gettimeofday(&endtime, NULL)) {
  64. perror ("gettimeofday");
  65. return 1;
  66. }
  67. printf("%d locks/unlocks of a semaphore took %d usecs.n", count, 
  68. (endtime.tv_sec - starttime.tv_sec) * 1000000 +
  69. (endtime.tv_usec - starttime.tv_usec));
  70. return 0;
  71. }