, , (.. , ): double flock() . , fd_sh fd_ex. , :
- flock (fd_ex, LOCK_SH) - ,
- flock (fd_sh, LOCK_SH) - .
- flock (fd_ex, LOCK_UN) - ,
- flock (fd_sh, LOCK_UN)
:
- flock (fd_ex, LOCK_EX) -
- flock (fd_sh, LOCK_EX) - .
- flock (fd_sh, LOCK_UN) - , ( , )
- flock (fd_ex, LOCK_UN)
, fd_ex , fd_sh , , , . , 1 , 2 , . , , , , , , ( ) , , 1-3, ( , ).
- , , . . , , fd_ex . . .
: , pthread_rwlock ( PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP attr).
8 ( pthread_rwlock), /, .
1 - Intel Core2 Debian Linux 3.16.36:
90% reads/10% writes
single flock double flock pthread_rwlock
total overhead* 90.4% 21.7% 11.6%
readers waittime* 20.2% 50.1% 47.1%
writers waittime 95.2% 64.5% 54.8%
50% reads/50% writes
single flock double flock pthread_rwlock
total overhead 22.0% 33.7% 3.2%
readers waittime 63.6% 82.2% 82.7%
writers waittime 87.8% 84.0% 70.3%
10% reads/90% writes
single flock double flock pthread_rwlock
total overhead 5.3% 8.4% 0.2%
readers waittime 82.5% 87.2% 96.8%
writers waittime 87.3% 87.4% 78.5%
" " - ( " " - " " )/ " ", - , ;
'waittime' - " " /( " " + " " ), ,
2 - 16 (32 HT, Intel Xeon) Debian Linux 3.19.6:
90% reads/10% writes
single flock double flock pthread_rwlock
total overhead 134.3% 17.1% 11.6%
readers waittime 13.2% 46.4% 45.8%
writers waittime 96.7% 65.3% 54.3%
50% reads/50% writes
single flock double flock pthread_rwlock
total overhead 37.9% 30.5% 2.9%
readers waittime 46.1% 78.4% 83.1%
writers waittime 90.5% 85.9% 70.0%
10% reads/90% writes
single flock double flock pthread_rwlock
total overhead 7.2% 9.0% 0.4%
readers waittime 66.9% 80.6% 96.8%
writers waittime 88.0% 87.9% 78.4%
, . . . , .
Pthread rwlock . , , .
. "usleep (10000 + rand()% 1000)". clock_gettime (CLOCK_MONOTONIC). ( ) (1), , . .