r6.0.0:Introduction
Data Structures
This release of liblfds provides the following;
- Freelist
- Queue
- Ringbuffer
- SList (logical delete only)
- Stack
Supported Platforms
This release of liblfds has been ported to the following platforms;
Hardware | Operating System | Toolchain |
x64 | Windows 64-bit | 1. Microsoft Visual Studio 2008 2. Microsoft Windows SDK and GNUmake >= 3.8.1 |
x64 x86 |
Windows 32-bit | 1. Microsoft Visual Studio 2008 2. Visual C++ 2008 Express Edition 3. Microsoft Windows SDK and GNUmake >= 3.8.1 |
x64 x86 |
Windows Kernel | 1. Windows Driver Kit >= 7.0.0 |
x64 | Linux 64-bit | 1. GCC >= 4.1.0 and GNUmake >= 3.8.1 |
x64 x86 ARM |
Linux 32-bit | 1. GCC >= 4.1.0 and GNUmake >= 3.8.1 |
Tested Platforms
This release of liblfds has actually been built and where possible tested on the following platforms;
Hardware | Operating System | Toolchain | Targets |
Intel Core i5 | Windows 7 build 7600 64-bit | Microsoft SDK for Windows 7 v7.1 and GNUmake 3.8.1 | native |
VM 64-bit | Windows 7 build 7600 64-bit | Visual C++ 2008 Trial Edition | x64 x86 |
VM 64-bit | Windows 7 build 7600 64-bit | Microsoft Windows Driver Kit v7.1.0 | Windows 7 free build 64-bit Windows 7 free build 32-bit Windows XP free build 32-bit |
VM 64-bit | Linux 3.2.30-49.59.amzn1.x86_64 | GCC 4.6.2 20111027 and GNUmake 3.8.1 | native |
VM 32-bit | Linux 3.2.30-49.59.amzn1.i686 | GCC 4.6.2 20111027 and GNUmake 3.8.1 | native |
Cortex A15 | Linux 3.4.0 armv71 | GCC 4.6.3 and GNUmake 3.8.1 | native |
Building
On Windows (user-mode), depending on your target platform, one of the following toolchains is required;
- Microsoft Visual Studio 2008 (expensive)
- Visual C++ 2008 Express Edition (free, but no 64 bit support)
- Microsoft Windows SDK (free, no GUI, has 64 bit support) and GNUmake 3.81
On Windows (kernel-mode), the following toolchain is required;
- Windows Driver Kit 7.0.0 or later
On Linux, the following toolchain is required;
- gcc 4.1.0 or later and GNUmake 3.81
For documentation, see the building guide.
Using
Once built, there is a single header file, /inc/liblfds600.h and a single library file /bin/liblfds.*. The suffix of the library file varies by platform and by the type of library you have chosen to build (static or dynamic).
Testing and Benchmarking
The library comes with a command line test and benchmark program. This program requires threads. As such, it is only suitable for platforms providing thread support and which can execute a command line binary. Currently this means the test and benchmark program works for all platforms except the Windows Kernel.
For documentation, see the testing and benchmarking guide.
Porting
Both the test program and liblfds provide an abstraction layer which acts to mask platform differences. Porting is the act of implementing on your platform the functions which make up the abstraction layers. You do not need to port the test program to port liblfds, but obviously it is recommended, so you can test your port.
To support liblfds, your platform must support either contigious double-word compare-and-swap (e.g. x86/x64) or contigious double-word load-link/conditional-store where normal loads cannot occur inside the LL/CS pair (e.g. ARM) or single word load-link/conditional-store where normal loads can occur inside the LL/CS pair.
This requirement excludes the IA64, MIPS, PowerPC and SPARC platforms.
For documentation, see the porting guide.