From what I gathered on the lock free programming, it is incredibly hard to do right… and I agree.
Just thinking about some problems makes my head hurt. But what I wonder is, why isn’t
there a widespread use of high-level wrappers around (e.g. lock free queue and similar stuff)?
For example boost has no lock free library, although one was suggested as far as I know.
I mean I guess that there is a lot of applications where you cant avoid the fact that the critical
section is the big part of the load. So what are the reasons? Is it…
- Patents – I heard that some stuff related to lock-free programming is patented.
- Performance.
- Google, and Microsoft have internal libraries like that but none of them are public…
- Something else?
So my question is: Why are high level abstractions that use lock free programming deep down not very
popular, while at the same time “regular” multi-threaded programming is “in”?
EDIT: boost got a lockfree lib 🙂
There are few people who are familiar enough with the field to implement easy-to-use lock-free libraries. Of those few, even fewer publish work for free and of those almost none do the vital additional work to make the library useable – e.g. publish full API docs, etc. They tend to just release a zip file with code in, which is almost useless. Then of course you also need to find a library which is written in the language you want to use, compiles on the platform you’re using and finally, word of the library has to get out, so people know it exists.
Patents are an issue, in that they limit what can be offered. There is, for example, to my knowledge no unpatented singly-linked list. All the skip list stuff is heavily patented, too.
A hero in this field is Cliff Click, who came up with a lock-free hash, which he has more-or-less placed in the public domain.
You can find my lock-free library here;
http://www.liblfds.org
Another is Samy Bahra’s Concurrency Kit;
http://www.concurrencykit.org