TEST2.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /**************************************************************************/
  2. /* TEST2 - count maximum number of thread switches per second             */
  3. /*       - NORMAL rate and DEBUG rate computed separately                 */
  4. /*       - messaging used to signal main thread at the end of each test   */
  5. /**************************************************************************/
  6. #include <stdio.h>
  7. #include <rtos.h>
  8. DWORD count1 = 0, count2 = 0;
  9. DWORD far *sysclock = 0x46cL;
  10. DWORD endtime;
  11. void syncro_start(void)
  12. {
  13.     DWORD now;
  14.     now = *sysclock;
  15.     while ( now == *sysclock) ;
  16.     endtime = *sysclock + 91L;  // 5 sec
  17. }
  18. void switcher1(DWORD arg)
  19. {
  20.     count1 = 0;
  21.     do {
  22.         rt_yield();
  23.         count1++;
  24.         if ( endtime < *sysclock ) break;
  25.     } while ( 1 );
  26.     ksendmessage( kmainthread, 1, 0 );
  27. }
  28. void switcher2(DWORD arg)
  29. {
  30.     count2 = 0;
  31.     do {
  32.         rt_yield();
  33.         count2 ++;
  34.         if ( endtime < *sysclock ) break;
  35.     } while ( 1 );
  36.     ksendmessage( kmainthread, 1, 0 );
  37. }
  38. int main(int argc, char **argv)
  39. {
  40.     int value;
  41.     DWORD data;
  42.     kpreemptive = 0;    /* it's zero by default, just stressing the point */
  43.     rt_init(100);
  44.     puts("starting...will take 5 seconds to measure NORMAL thread switch rate");
  45.     kdebug = 0;
  46.     syncro_start();
  47.     rt_newthread( switcher1, 1,2048, 0, "worker" );
  48.     rt_newthread( switcher2, 2,2048, 0, "worker" );
  49.     kreadmessage( &value, &data );
  50.     kreadmessage( &value, &data );
  51.     printf("%lu switches per secondn", (count1 + count2)/ 5 );
  52.     puts("starting...will take 5 seconds to measure DEBUG thread switch rate");
  53.     kdebug = 1;
  54.     syncro_start();
  55.     rt_newthread( switcher1, 1,2048, 0, "worker" );
  56.     rt_newthread( switcher2, 2,2048, 0, "worker" );
  57.     kreadmessage( &value, &data );
  58.     kreadmessage( &value, &data );
  59.     printf("%lu switches per secondn", (count1 + count2)/ 5 );
  60.     return( 0 );
  61. }