I continue my journey with concurrency patterns in today's post. The Thread-Safe Interface fits very well when the critical sections are just objects.
Dealing with Mutation: Thread-Safe Interface
by Rainer Grimm
From the article:
The naive idea to protect all member functions of a class with a lock causes, in the best case, a performance issue and, in the worst case, a deadlock.
A Deadlock
The small code snippet has a deadlock.
struct Critical{ void memberFunction1(){ lock(mut); memberFunction2(); ... } void memberFunction2(){ lock(mut); ... } mutex mut; }; Critical crit; crit.memberFunction1();Calling
crit.memberFunction1
causes the mutexmut
to be locked twice. For simplicity reasons, the lock is a scoped lock. Here are the two issues:
Add a Comment
Comments are closed.