- 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.
- R語言數據分析從入門到精通
- Microsoft Application Virtualization Cookbook
- Instant Zepto.js
- INSTANT MinGW Starter
- TypeScript實戰指南
- Python完全自學教程
- Cocos2d-x學習筆記:完全掌握Lua API與游戲項目開發 (未來書庫)
- 單片機應用與調試項目教程(C語言版)
- NoSQL數據庫原理
- 區塊鏈技術與應用
- Visualforce Developer’s guide
- 開源項目成功之道
- Sails.js Essentials
- C++ System Programming Cookbook
- SQL Server 2012 數據庫應用教程(第3版)