Nat! bio photo

Nat!

Senior Mull

Twitter Github Twitch

mulle-aba: release

mulle-aba “release”

Tomorrow I am off for a vacation, but I wanted to get this out before.

Here is the git repository mulle-aba. If it doesn’t compile, see the BUILD.md file.

Unfortunately there is some truth to, “If it was hard to write, it should be hard to understand.” ;) My diploma thesis was definitely much easier. There were numerous times, where I had myself convinced, that it was impossible. I had already given up, but then I just had to try one more idea …

Please read the README.md for a description of the API.

High level overview of operation

mulle-aba has various states of operation.

Diagram

It all starts with mulle_aba_init which initializes the system and it all ends with mulle_aba_done. All threads need to call mulle_aba_register on start and mulle_aba_unregister at the end.

Resources are freed with mulle_aba_free. Periodically, but not too often, each thread should call mulle_aba_checkin to free up resources.

The interesting lock-free part of mulle-aba is in state 5, where threads call mulle_aba_checkin and mulle_aba_free (black). The blue operations are soft-locking. Here threads have a chance of being locked out by deficient other threads.

Some points of interest

Here are some points to be aware of.

Q: Where is the lock ?
A: The lock is during registration and unregistration of threads. It does NOT affect running registered threads.

Q: Where is the leak ?
A: Some pieces of memory can only be reclaimed after all threads have joined. If you have threads registering and unregistering all the time, you will incur a leak at every unregistration. These leaks will be freed when you call mulle_aba_done.

Q: What is the worst case scenario ?
A: If a registered thread is stuck in getchar(), while other threads are running and freeing stuff. mulle-aba will be even worse than just leaking, because of overhead.

Q: How is the performance best case ?
A: I suspect pretty much optimal :)

Q: Where has this been tested ?

  • i386 + x86_64, i5-2557m + i7 4770k, Mac OS X 10.10
  • x86_64, Xeon E5 2660 V3, Ubuntu 15.04
  • ARM, iPad mini iOS 9

Continue to mulle-aba: How it works, part 1


Post a comment

All comments are held for moderation; basic HTML formatting accepted.

Name:
E-mail: (not published)
Website: