当前位置:网站首页>Mutex and rwmutex in golang
Mutex and rwmutex in golang
2022-07-03 03:54:00 【sandyznb】
Mutex The mutex , The main means of access control for shared resources , It's easy to use , Just Lock and Unlock(), Simple use does not mean simple internal implementation , We can think deeply about if Mutex What happens when you unlock repeatedly ? Why does it show up ?
One :Mutex data structure
src\sync\mutex.go
// A Mutex must not be copied after first use.
type Mutex struct {
state int32
sema uint32
}
// A Locker represents an object that can be locked and unlocked.
type Locker interface {
Lock()
Unlock()
}state: Save the relevant data of the lock For example, the state of the lock 、 How many are waiting for this lock goroutine wait
sema: Semaphore , The coroutine block waits for the semaphore , The unlocked coroutine releases the semaphore to wake up the coroutine waiting for the semaphore .

locked: Indicates whether the current lock is locked ,0 It's not locked ,1 It's locked
woken: Is there a process that has been awakened ,0: There's no synergy 1: There is a process to wake up , In the process of locking
starving: Indicates whether the current lock is hungry ,0 No hunger ,1 Starvation It means that the blocking time of some processes has exceeded 1ms
waiter: The number of coprocesses blocking waiting locks , When unlocking the co process, judge whether to release the semaphore according to this value
Two : Add unlocking process
1 Simple locking : Suppose there is only one co process locking , No other co process interference ,locked From 0---->1, The locking process will judge locked Whether the flag bit is 0, If it is 0 Then put locked Set as 1, It represents the success of locking .
2 Locking is blocked : Suppose when locking , The lock has been occupied by other processes (locked It's already 1), here waiter The counter will be +1, The current process will be blocked , until locked become 0 Only then can we have a chance to be awakened
3 Simply unlock : Suppose there is no other co process blocking when unlocking ,locked from 1---->0, And there is no need to release semaphores
4 Unlock and wake up the process : Suppose when unlocking , Yes 1 One or more processes are blocked ,locked from 1--->0, here waiter>0, So release a semaphore , Wake up a blocked process , The awakened synergetic process Locked from 0--->1, The awakened process lives a lock
3、 ... and : The spin
When it's locked , If at present Locked It's already 1, It indicates that the lock has been occupied , The process of trying to lock does not immediately turn into blocking , It will continue to detect Locked Whether it becomes 0, This process is called spin process .
The spin time is very short , If you find that the lock has been released in the process of spinning , Then this process will immediately get all , At this time, even if other processes are awakened, the lock cannot be obtained , Can only block again .
The advantage of spin is that when locking fails, there is no need to immediately turn to blocking , There is a certain chance to get the lock , In this way, the switching of coordination process can be avoided .
The advantage of spin : Make better use of cpu, Try to avoid co process switching .
The problem with spin : If a lock is obtained during spin , Previously blocked processes will not get locks , If there are many locking processes and the lock is obtained by spinning every time , Then it is difficult for the blocked process to obtain the lock , Is in a state of hunger . This is the front starving, It doesn't spin in this state .
Four :Mutex Pattern
normal Patterns and starvation Pattern
The default state is normal, In this mode , If the process fails to lock, it will not immediately turn into the blocking queue , Instead, first judge whether the spin condition is satisfied , If satisfied, it will start the spin process and try to grab the lock .
边栏推荐
- [Blue Bridge Road -- bug free code] DS18B20 temperature reading code analysis
- Bid farewell to artificial mental retardation: Mengzi open source project team received RMB 100 million financing to help NLP develop
- [leetcode question brushing day 34] 540 Unique element in array, 384 Disrupt array, 202 Happy number, 149 Maximum number of points on a line
- What is pytorch? Is pytorch a software?
- [combinatorics] brief introduction to generating function (definition of generating function | Newton binomial coefficient | commonly used generating function | correlation with constant | correlation
- QSAR model establishment script based on pytoch and rdkit
- 如何迈向IPv6之IPv6过渡技术-尚文网络奎哥
- Hutool动态添加定时任务
- Advanced redis applications [password protection, data persistence, master-slave synchronization, sentinel mode, transactions] [not completed yet (semi-finished products)]
- How to move towards IPv6: IPv6 Transition Technology - Shangwen network quigo
猜你喜欢

Table structure of Navicat export database
![Mongodb replication set [master-slave replication]](/img/2c/8030548455f45fa252062dd90e7b8b.png)
Mongodb replication set [master-slave replication]

What can learning pytorch do?

Cnopendata China Customs Statistics

js中#号的作用

TCP, the heavyweight guest in tcp/ip model -- Kuige of Shangwen network

中移物联网OneOS与OneNET入选《2021年物联网示范项目名单》

Is pytorch difficult to learn? How to learn pytorch well?

nodejs基础:浅聊url和querystring模块
![[home push IMessage] software installation virtual host rental tothebuddy delay](/img/e7/eb20a773e4b674962f856d179a3769.jpg)
[home push IMessage] software installation virtual host rental tothebuddy delay
随机推荐
没有sXid,suid&sgid将进入险境!-尚文网络xUP楠哥
ffmpeg之 一张/多张图片合成视频
How to move towards IPv6: IPv6 Transition Technology - Shangwen network quigo
leetcode:动态规划模板
释放数据力量的Ceph-尚文网络xUP楠哥
递归:快速排序,归并排序和堆排序
阿洛对自己的思考
Advanced redis applications [password protection, data persistence, master-slave synchronization, sentinel mode, transactions] [not completed yet (semi-finished products)]
2022deepbrainchain biweekly report no. 104 (01.16-02.15)
Ffmpeg recording screen and screenshot
Hutool dynamically adds scheduled tasks
编译文件时报错:错误: 编码GBK的不可映射字符
【刷题篇】接雨水(一维)
vim 的实用操作
Some preliminary preparations for QQ applet development: make an appointment for a development account, download and install developer tools, and create QQ applet
[Apple Push] IMessage group sending condition document (push certificate) development tool pushnotification
Introduction to mongodb
How does the pytorch project run?
Hutool动态添加定时任务
2022 mobile crane driver examination registration and mobile crane driver operation examination question bank