I had forgotten how much work it is to get code working on multiple plateforms. Between Visual Studio, GCC, and two flavors of Clang (the vanilla and Apple versions have one really annoying difference that I had to work around) it’s a lot of work. So that’s my excuse for taking a month and a half longer than expected to whip the transactional memory system at work into a state where I was comfortable releasing it to the outside world. It’s now available on github.
The library is licensed under a BSD license1 so feel free to use it as you like. We’ve been using the system in applications that we’ve been shipping to customers for years so it is stable. But be sure to do some prototyping before you rely on it too much to make sure that it can provide enough performance. While it’s single transaction overhead is low, it does have contention issues when you start running lots of threads. At Wyatt we get plenty of performance for our purposes (up to eight computation heavy threads plus a few more IO bound threads), but your mileage may vary. Raw thread count isn’t all you need to think about, you also need to consider how much transactional stuff you’re doing in those threads. For an idea of what we’re doing see my talk from CppCon or this paper.
We went with a BSD license instead of something more restrictive because we use some open source libraries in our closed-source applications and we felt that the best way to give back was to use an equally permissive license on our own open-source releases.↩