3 ms·
> One of the simplest and most pernicious programming problems is the humble deadlock > […] > Unfortunately deadlocks are not always so easy to spot, especial
by Someone 3y ago
> One of the simplest and most pernicious programming problems is the humble deadlock
> […]
> Unfortunately deadlocks are not always so easy to spot, especially as more layers of abstraction are added
> […]
> Compilers don’t even try to help here.
https://clang.llvm.org/docs/ThreadSafetyAnalysis.html https://clang.llvm.org/docs/ThreadSafetyAnalysis.html:
“Clang Thread Safety Analysis is a C++ language extension which warns about potential race conditions in code. The analysis is completely static (i.e. compile-time); there is no run-time overhead. The analysis is still under active development, but it is mature enough to be deployed in an industrial setting. It is being developed by Google, in collaboration with CERT/SEI, and is used extensively in Google’s internal code base.
Thread safety analysis works very much like a type system for multi-threaded programs. In addition to declaring the type of data (e.g. int, float, etc.), the programmer can (optionally) declare how access to that data is controlled in a multi-threaded environment. For example, if foo is guarded by the mutex mu, then the analysis will issue a warning whenever a piece of code reads or writes to foo without first locking mu. Similarly, if there are particular routines that should only be called by the GUI thread, then the analysis will warn if other threads call those routines.
[…]
EXCLUDES is an attribute on functions or methods, which declares that the caller must not hold the given capabilities. This annotation is used to prevent deadlock.”
Googling “static deadlock detection” will uncover similar tools (often not as well integrated with the compiler)
- vg_head 3y agoThere's also Software-Transactional Memory in which deadlocks are pretty much impossible. Though it only really works in languages that can properly track side effects, like Haskell's monads.