- Mastering C# Concurrency
- Eugene Agafonov Andrew Koryavchenko
- 301字
- 2021-07-09 21:26:06
Chapter 2. Lock-Free Concurrency
In Chapter 1, Traditional Concurrency, we reviewed thread synchronization with locking and how to use locks effectively. However, there will be still performance overhead related to locking. The best way to avoid such issues is by not using locks at all whenever possible. Algorithms that do not use locking are referred to as lock-free algorithms.
Lock-free algorithms in turn are of different types. One of the most important types is wait-free algorithms. These algorithms not only evade the use of locks, but also are guaranteed to not wait for any events from other threads. This is a best-case scenario but unfortunately, it is a rare situation when we can avoid waiting for the other threads at all. Usually, a real concurrent program tries to be as close as possible to wait-free, and this is what every developer should try to achieve.
There is one more category of algorithms that do not use OS-level thread blocking but use spin locks. This allows the creation of quite efficient code in situations when the code inside the lock has to run very fast. Such algorithms can be called lock-free in various sources, but strictly speaking they are not as they do not guarantee that the algorithm will be progressing, since it is possible it gets blocked in various situations. We will discuss such situations later in Chapter 10, Troubleshooting Parallel Programs.
Note
Please notice that a multithreaded program can be targeted in different scenarios, and thus the metrics could be different. For example, if our goal is to save the battery charge of a laptop or to save the CPU workload, locking techniques are preferred (until some point when there will be too many blocked threads). However, if we need overall performance, then lock-free algorithms are usually better.
- C++ Primer習(xí)題集(第5版)
- Visual C++程序設(shè)計(jì)學(xué)習(xí)筆記
- Moodle Administration Essentials
- 深入淺出WPF
- 算法大爆炸:面試通關(guān)步步為營(yíng)
- Web全棧工程師的自我修養(yǎng)
- HDInsight Essentials(Second Edition)
- Python忍者秘籍
- C#實(shí)踐教程(第2版)
- FPGA Verilog開發(fā)實(shí)戰(zhàn)指南:基于Intel Cyclone IV(進(jìn)階篇)
- PHP編程基礎(chǔ)與實(shí)例教程
- Python 3.7從入門到精通(視頻教學(xué)版)
- Scala編程實(shí)戰(zhàn)
- Docker:容器與容器云(第2版)
- OpenCV 3.0 Computer Vision with Java