天天看點

讀寫鎖原理

讀寫鎖是寫獨占,讀共享,若有一個線程正在寫,占了寫鎖,其他線程寫鎖讀鎖都拿不到。

讀寫鎖高2位元組儲存讀鎖,低2位元組儲存寫鎖。

1 、如果一個線程用讀鎖鎖定了臨界區,那麼其他線程也可以用讀鎖來進入臨界區,這樣可以有多個線程并行操作。但是一旦加了讀鎖,寫鎖就加不了了。而且擷取到讀鎖,還是可以修改被保護的變量的。

2、一個線程先要寫操作,擷取寫鎖必須讀鎖和寫鎖都未被占用才可以成功加寫鎖。是以如果讀線程很多,一直占用讀鎖,讀鎖的計數值很大,寫鎖很久都擷取不到,導緻寫鎖饑餓。

為了解決寫鎖饑餓,如果要擷取寫鎖(讀鎖計數不為0,需要等待所有讀鎖釋放 ),為了防止其他線程不斷擷取讀鎖,如果要擷取寫鎖阻塞了,那麼讀鎖也擷取不到。簡而言之就是如果寫鎖擷取不到,讀鎖也不能擷取。

c++

繼續閱讀