官术网_书友最值得收藏!

  • 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.

主站蜘蛛池模板: 屏山县| 额济纳旗| 丹东市| 镇原县| 大新县| 肇东市| 巩留县| 无锡市| 罗甸县| 浑源县| 麻江县| 察雅县| 榆社县| 霍林郭勒市| 三原县| 容城县| 个旧市| 三门峡市| 高雄市| 宁远县| 新宁县| 铁岭县| 武城县| 桃源县| 西宁市| 四会市| 松原市| 加查县| 汶上县| 正安县| 赫章县| 四平市| 湘阴县| 定远县| 姜堰市| 林州市| 宝兴县| 息烽县| 西畴县| 嘉祥县| 凯里市|