- Mastering C++ Multithreading
- Maya Posch
- 290字
- 2021-07-15 17:34:01
Software
Software-defined mutual exclusion implementations are all based on busy-waiting. An example is Dekker's algorithm, which defines a system in which two processes can synchronize, employing busy-wait to wait for the other process to leave the critical section.
The pseudocode for this algorithm is as follows:
variables
wants_to_enter : array of 2 booleans
turn : integer
wants_to_enter[0] ← false
wants_to_enter[1] ← false
turn ← 0 // or 1
p0:
wants_to_enter[0] ← true
while wants_to_enter[1] {
if turn ≠ 0 {
wants_to_enter[0] ← false
while turn ≠ 0 {
// busy wait
}
wants_to_enter[0] ← true
}
}
// critical section
...
turn ← 1
wants_to_enter[0] ← false
// remainder section
p1:
wants_to_enter[1] ← true
while wants_to_enter[0] {
if turn ≠ 1 {
wants_to_enter[1] ← false
while turn ≠ 1 {
// busy wait
}
wants_to_enter[1] ← true
}
}
// critical section
...
turn ← 0
wants_to_enter[1] ← false
// remainder section
(Referenced from: )
In this preceding algorithm, processes indicate the intent to enter a critical section, checking whether it's their turn (using the process ID), then setting their intent to enter the section to false after they have entered it. Only once a process has set its intent to enter to true again will it enter the critical section again. If it wishes to enter, but turn does not match its process ID, it'll busy-wait until the condition becomes true.
A major disadvantage of software-based mutual exclusion algorithms is that they only work if out-of-order (OoO) execution of code is disabled. OoO means that the hardware actively reorders incoming instructions in order to optimize their execution, thus changing their order. Since these algorithms require that various steps are executed in order, they no longer work on OoO processors.
- 大話PLC(輕松動漫版)
- 劍指JVM:虛擬機實踐與性能調優
- Python Geospatial Development(Second Edition)
- HTML5+CSS3 Web前端開發技術(第2版)
- Learning Continuous Integration with TeamCity
- 深入理解C指針
- 鴻蒙OS應用編程實戰
- Deep Learning with R Cookbook
- 石墨烯改性塑料
- SEO教程:搜索引擎優化入門與進階(第3版)
- Python物理建模初學者指南(第2版)
- Java 11 and 12:New Features
- Beginning C# 7 Hands-On:The Core Language
- Implementing Domain:Specific Languages with Xtext and Xtend
- SAP HANA Starter