malbrain / rwlock

Phase Fair and Standard Reader Writer Locks
16 stars 5 forks source link

rwlock

Reader Writer Locks

Initialze locks to all bytes zero. Compile with -D STANDALONE to add benchmarking main module. Run the benchmark with two parameters: # of threads and lock-type. The benchmark consists of 1000000 lock/work/unlock calls divided by the number of threads specified. 500x Ratio of Read Locks to Write Locks.

readerwriter.c: linux/Windows spinlock/phase-fair:

0: type 0   pthread/SRW system rwlocks
1: type 1   Phase-Fair FIFO simple rwlock
2: type 2   Mutex based, neither FIFO nor Fair
3: type 3   FIFO and Phase-Fair Brandenburg spin lock

Usage: ./readerwriter #thrds lockType
0: sizeof RWLock0: 56
1: sizeof RWLock1: 8
2: sizeof RWLock2: 4
3: sizeof RWLock3: 8

sample Windows 10 64bit output:

C:\Users\Owner\Source\Repos\malbrain\rwlock>readerwriter 8 3

rwlock time/lock:
 real 0.041us
 user 0.250us
 sys  0.000us
 nanosleeps 34

rwlock moderate load:
 real 0.252us
 user 3.313us
 sys  0.000us
 nanosleeps 330

C:\Users\Owner\Source\Repos\malbrain\rwlock>readerwriter 8 2

rwlock time/lock:
 real 0.052us
 user 0.329us
 sys  0.031us
 nanosleeps 1344

rwlock moderate load:
 real 0.266us
 user 3.297us
 sys  0.000us
 nanosleeps 1555

C:\Users\Owner\Source\Repos\malbrain\rwlock>readerwriter 8 1

rwlock time/lock:
 real 0.044us
 user 0.360us
 sys  0.000us
 nanosleeps 22

rwlock moderate load:
 real 0.272us
 user 3.313us
 sys  0.000us
 nanosleeps 2505

C:\Users\Owner\Source\Repos\malbrain\rwlock>readerwriter 8 0

rwlock time/lock:
 real 0.017us
 user 0.047us
 sys  0.000us
 nanosleeps 0

rwlock moderate load:
 real 1.282us
 user 10.063us
 sys  0.000us
 nanosleeps 0

Please address any questions or concerns to the program author: Karl Malbrain, malbrain@cal.berkeley.edu.