home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / fastmutx.zip / tests / BenchSem.pas next >
Pascal/Delphi Source File  |  1996-07-11  |  2KB  |  65 lines

  1. uses os2def, os2base, os2SysLib;
  2.  
  3. const
  4.     mustDie : boolean = FALSE;
  5.     t1count : Longint = 0;
  6.     t2count : Longint = 0;
  7.  
  8. function Thread1(Parm : Pointer) : longint;
  9. var sem : tMutexSem;
  10. begin
  11.  fmsInit(sem);
  12.  repeat
  13.   fmsRequest(sem);
  14.   fmsRequest(sem);
  15.   fmsRelease(sem);
  16.   fmsRelease(sem);
  17.   Inc(t1count);
  18.  until mustDie;
  19.  EndThread(0);
  20. end;
  21.  
  22. function Thread2(Parm : Pointer) : longint;
  23. var sem : hMtx;
  24. begin
  25.  if DosCreateMutexSem(nil, sem, 0, FALSE) = 0
  26.   then
  27.  repeat
  28.   DosRequestMutexSem(sem, sem_Indefinite_Wait);
  29.   DosRequestMutexSem(sem, sem_Indefinite_Wait);
  30.   DosReleaseMutexSem(sem);
  31.   DosReleaseMutexSem(sem);
  32.   Inc(t2count);
  33.  until mustDie;
  34.  EndThread(0);
  35. end;
  36.  
  37. var TimeSem : hEv;
  38.     Timer   : hTimer;
  39.     tid     : Longint;
  40.  
  41. begin
  42.  if DosCreateEventSem(nil, TimeSem, dc_Sem_Shared, FALSE) <> 0 then Halt;
  43.  
  44.  Write('Please wait...');
  45.  BeginThread(nil, 8192, Thread1, nil, create_Ready, tid);
  46.  
  47.  if DosAsyncTimer(5000, hSem(TimeSem), Timer) <> 0 then Halt;
  48.  DosWaitEventSem(TimeSem, sem_Indefinite_Wait);
  49.  mustDie := TRUE; DosWaitThread(tid, dcww_Wait);
  50.  
  51.  Write(' be patient...');
  52.  mustDie := FALSE; DosResetEventSem(TimeSem, tid);
  53.  BeginThread(nil, 8192, Thread2, nil, create_Ready, tid);
  54.  
  55.  if DosAsyncTimer(5000, hSem(TimeSem), Timer) <> 0 then Halt;
  56.  DosWaitEventSem(TimeSem, sem_Indefinite_Wait);
  57.  mustDie := TRUE; DosWaitThread(tid, dcww_Wait);
  58.  
  59.  Writeln;
  60.  Writeln('Fast semaphores: ', (t1count*2)/5:1:2, ' transactions per second');
  61.  Writeln('OS/2 semaphores; ', (t2count*2)/5:1:2, ' transactions per second');
  62.  Writeln('Fast sem/OS2 sem ratio = ', t1count/t2count:1:2);
  63. end.
  64.  
  65.