While working on paradox, Kaja and I felt that we needed a cross-platform threading library, which handles all the subtle differences in capabilities and semantics of each platform`s API.
After a rewrite of Kaja`s original code, I present to you ithreads. You can find the source in this subversion repository.
At this moment ithreads gives you implementations of:
- Event (aka. conditional variable)
- R/w lock
By using (one or more of) the following APIs:
- pthreads, posix thread API (unix, linux …)
- pth, portable user-space threads
- futex, linux`s lightweight fast hybrid locking
ithreads will use generic implementations in case one of the primitives (eg. Semaphore for pthreads) isn’t available on your system.
I’m espacially happy with the futex based implementations. They outperform the pthreads implementation, and are a lot smaller (4 vs. ~16 bytes for a mutex in pthreads) – although they aren’t as robust (but still correct).
Support for BeOS, OS/2, Windows and more will be added, but testing them will be tricky.
The library will still need a lot of stress testing and probably still contains some bugs – you’re warned. When everything works nicely I’ll add all kinds of extra flavours of the primitives, eg. read-favouring r/w-lock.
I hope it will prove useful.