Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I write a lock free structure?

In my multithreaded application and I see heavy lock contention in it, preventing good scalability across multiple cores. I have decided to use lock free programming to solve this.

How can I write a lock free structure?

like image 769
Suma Avatar asked Sep 18 '08 13:09

Suma


People also ask

What is a lock-free data structure?

3.2. Lock-Free. A data structure provides lock-freedom if, at any time, at least one thread can proceed. All other threads may be starving. The difference to obstruction-freedom is that there is at least one non-starving thread even if no threads are suspended.

How do you implement a lock-free algorithm in C++?

A first variant of this algorithm is possible using a lock-free technique, whereby the slist is accessed through an atomic variable. What this allow is for the producer to create all of its items at once, then publish them to the consumer by atomically setting the queue's head. Consumers remain the same.

What is lock-free code?

3. 5. lock-free usually doesn't mean "any lock", it means something like transactional memory, or optimistic design, where you don't use lock for every operation, but once in a while (for rolling back or doing transaction) - some kind of lock will be needed.

How does a lock-free queue work?

Lock-free queue is a queue applying to concurrency but without locking. When using lock-free queue, slow or stopped processes do not prevent other processes from accessing data in it.


2 Answers

Short answer is:

You cannot.

Long answer is:

If you are asking this question, you do not probably know enough to be able to create a lock free structure. Creating lock free structures is extremely hard, and only experts in this field can do it. Instead of writing your own, search for an existing implementation. When you find it, check how widely it is used, how well is it documented, if it is well proven, what are the limitations - even some lock free structure other people published are broken.

If you do not find a lock free structure corresponding to the structure you are currently using, rather adapt the algorithm so that you can use some existing one.

If you still insist on creating your own lock free structure, be sure to:

  • start with something very simple
  • understand memory model of your target platform (including read/write reordering constraints, what operations are atomic)
  • study a lot about problems other people encountered when implementing lock free structures
  • do not just guess if it will work, prove it
  • heavily test the result

More reading:

Lock free and wait free algorithms at Wikipedia

Herb Sutter: Lock-Free Code: A False Sense of Security

like image 104
Suma Avatar answered Oct 10 '22 03:10

Suma


Use a library such as Intel's Threading Building Blocks, it contains quite a few lock -free structures and algorithms. I really wouldn't recommend attempting to write lock-free code yourself, it's extremely error prone and hard to get right.

like image 42
Niall Avatar answered Oct 10 '22 04:10

Niall