Last Build Date: Fri, 07 May 2004 21:25:07 -0000
Fri, 07 May 2004 21:25:07 -0000
The libcontain library provides a large and growing number of fast and thread-safe container objects written in C and C++. This re;ease introduces a nuimber of important new features including a heap and a map, both based on a lock-free binomial tree. It also includes the required memory management to make the containers impervious to the ABA problem and thus truly thread-safe.
Many of the restrictions formerly bound to the containers have been lifted by the integration of the SMR-based memory management, provided by libmemory. Most of the containers are now truly thread-safe in the sense that you can combine any operation with any other on a single object, including two or more write operations.
Additionally, the hash implementation from libhash - with which this library began - has been reviewed and rendered thread-safe and faster than it was before. This same hash implementation was also the basis of a dictionary object that outran Microsoft's equivalent. This implementation should now be faster than the dictionary in question! It is, however, still lock-based - but a non-blocking hash implementation has been on the drawing boards for quite some time now and should be forthcoming shortly.
Help is still wanted for this project: there is an unsolved race condition in the array (vector) implementation and the architecture-specific code needs porting to non-IA32 platforms.
Fri, 07 May 2004 19:50:41 -0000
The libmemory library provides and implementation of M.M. Micheal's Safe memory Reclamation algorithm in C. This release is the first public release of the library.
The Safe Memory Reclamation (SMR) algorithm by M.M. Micheal provides a convenient way to get rid of the so-called ABA problem in which a value changes from A to B back to A between two reads. If, for example, the value you're reading is a pointer and the memory to which it points is freed and re-allocated between two reads, what you do with the memory it points to in that time may result in mayhem. The SMR algorithm prevents this by registering a "hazardous reference" to the pointer thus preventing the memory from being reclaimed while a reference exists.
The implementation is designed to fully implement the SMR algorithm without restricting the user to provide such information as the maximum number of threads used by the application or the batch size to be used by the algorithm. It will run on any POSIX-compliant platform and uses the POSIX threads API for thread-local storage. It should, however, be a trivial effort to port this library to Windows (but as I don't have a Windows machine available at this time, I won't be able to do that).
Help is still wanted for testing, writing the architecture-dependant code for non-IA32 platforms, etc.