当前位置:网站首页>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 .
边栏推荐
- NPM: the 'NPM' item cannot be recognized as the name of a cmdlet, function, script file, or runnable program. Please check the spelling of the name. If the path is included, make sure the path is corr
- Hutool dynamically adds scheduled tasks
- 记一次 .NET 差旅管理后台 CPU 爆高分析
- vim 的实用操作
- 2022 tea master (intermediate) examination questions and analysis and tea master (intermediate) practical examination video
- [home push IMessage] software installation virtual host rental tothebuddy delay
- navicat 导出数据库的表结构
- 2022 tea master (intermediate) examination questions and analysis and tea master (intermediate) practical examination video
- Nodejs Foundation: shallow chat URL and querystring module
- PHP generates PDF tcpdf
猜你喜欢

2022 mobile crane driver examination registration and mobile crane driver operation examination question bank

For instruction, uploading pictures and display effect optimization of simple wechat applet development

在 .NET 6 项目中使用 Startup.cs

递归:深度优先搜索
![Ansible introduction [unfinished (semi-finished products)]](/img/2a/0003daf761ba02d8837c4657fc3f29.png)
Ansible introduction [unfinished (semi-finished products)]

pytorch是什么?pytorch是一个软件吗?

Hutool dynamically adds scheduled tasks

Applet get user avatar and nickname

FileZilla Client下载安装

navicat 导出数据库的表结构
随机推荐
【刷题篇】接雨水(一维)
CEPH Shangwen network xUP Nange that releases the power of data
FileZilla client download and installation
Recursive use and multi-dimensional array object to one-dimensional array object
[mathematical logic] propositional logic (propositional and connective review | propositional formula | connective priority | truth table satisfiable contradiction tautology)
105. SAP UI5 Master-Detail 布局模式的联动效果实现明细介绍
递归:深度优先搜索
Table structure of Navicat export database
docker安装及启动mysql服务
Ansible introduction [unfinished (semi-finished products)]
pytorch怎么下载?pytorch在哪里下载?
NPM: the 'NPM' item cannot be recognized as the name of a cmdlet, function, script file, or runnable program. Please check the spelling of the name. If the path is included, make sure the path is corr
2022年已过半,得抓紧
QQ小程序开发之 一些前期准备:预约开发账号、下载安装开发者工具、创建qq小程序
Half of 2022 is over, so we must hurry up
2022deepbrainchain biweekly report no. 104 (01.16-02.15)
Message queue addition failure
Cnopendata China Customs Statistics
Basic operations of mongodb [add, delete, modify, query]
Introduction to mongodb