]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/readme.txt
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / readme.txt
1 introduction\r
2 ============\r
3 Welcome to liblfds, a portable, license-free, lock-free data structure library\r
4 written in C.\r
5 \r
6 supported platforms\r
7 ===================\r
8 Out-of-the-box ports are provided for;\r
9 \r
10 Operating System  CPU            Toolchain Choices\r
11 ================  =============  =================\r
12 Windows 64-bit    x64            1. Microsoft Visual Studio\r
13                                  2. Microsoft Windows SDK and GNUmake\r
14 \r
15 Windows 32-bit    x64, x86       1. Microsoft Visual Studio\r
16                                  2. Visual C++ Express Edition\r
17                                  3. Microsoft Windows SDK and GNUmake\r
18 \r
19 Windows Kernel    x64, x86       1. Windows Driver Kit\r
20 \r
21 Linux 64-bit      x64            1. GCC and GNUmake\r
22 \r
23 Linux 32-bit      ARM, x64, x86  1. GCC and GNUmake\r
24 \r
25 For more information including version requirements, see the building guide (lfds).\r
26 \r
27 data structures\r
28 ===============\r
29 This release of liblfds provides the following;\r
30 \r
31     * Freelist\r
32     * Queue\r
33     * Ringbuffer (each element read by a single reader)\r
34     * Singly-linked list (logical delete only)\r
35     * Stack\r
36 \r
37 These are all many-readers, many-writers.\r
38 \r
39 liblfds on-line\r
40 ===============\r
41 On the liblfds home page, you will find the blog, a bugzilla, a forum, a\r
42 mediawiki and the current and all historical releases.\r
43 \r
44 The mediawiki contains comprehensive documentation for development, building,\r
45 testing and porting.\r
46 \r
47 http://www.liblfds.org\r
48 \r
49 license\r
50 =======\r
51 There is no license.  You are free to use this code in any way.\r
52 \r
53 using\r
54 =====\r
55 Once built, there is a single header file, /inc/liblfds.h, which you must include\r
56 in your source code, and a single library file /bin/liblfds.*, where the suffix\r
57 depends on your platform and your build choice (static or dynamic), to which,\r
58 if statically built, you must link directly or, if dynamically built, you must\r
59 arrange your system such that the library can be found by the loader at run-time. \r
60 \r
61 testing\r
62 =======\r
63 The library comes with a command line test and benchmark program.  This program\r
64 requires threads.  As such, it is only suitable for platforms  which can execute\r
65 a command line binary and provide thread support.  Currently this means the test\r
66 and benchmark program works for all platforms except the Windows Kernel.\r
67 \r
68 For documentation, see the testing and benchmarking guide in the mediawiki.\r
69 \r
70 porting\r
71 =======\r
72 Both the test program and liblfds provide an abstraction layer which acts to\r
73 mask platform differences. Porting is the act of implementing on your platform\r
74 the functions which make up the abstraction layers.  You do not need to port\r
75 the test program to port liblfds, but obviously it is recommended, so you can\r
76 test your port.\r
77 \r
78 To support liblfds, your platform MUST support;\r
79 \r
80     * atomic single-word* increment\r
81     * atomic single-word compare-and-swap\r
82     * atomic contiguous double-word compare-and-swap*\r
83     * malloc and free\r
84     * compiler directive for alignment of variables declared on the stack\r
85     * compiler directives for compiler barriers and processor barriers\r
86 \r
87 * A ''word'' here means a type equal in length to the platform pointer size.\r
88 * This requirement excludes the Alpha, IA64, MIPS, PowerPC and SPARC platforms.\r
89 \r
90 Also, your platform MAY support;\r
91 \r
92     * compiler keyword for function inlining \r
93 \r
94 To support the test programme, your platform MUST support;\r
95 \r
96     * determining the number of logical cores\r
97     * threads (starting and waiting on for completion)\r
98 \r
99 For documentation, see the porting guide (lfds) in the mediawiki.\r
100 \r
101 release history\r
102 ===============\r
103 release 1, 25th September 2009, svn revision 1574.\r
104   - initial release\r
105 \r
106 release 2, 5th October 2009, svn revision 1599.\r
107   - added abstraction layer for Windows kernel\r
108   - minor code tidyups/fixes\r
109 \r
110 release 3, 25th October 2009, svn revision 1652.\r
111   - added singly linked list (logical delete only)\r
112   - minor code tidyups/fixes\r
113 \r
114 release 4, 7th December 2009, svn revision 1716.\r
115   - added ARM support\r
116   - added benchmarking functionality to the test program\r
117   - fixed a profound and pervasive pointer\r
118     declaration bug; earlier releases of liblfds\r
119     *should not be used*\r
120 \r
121 release 5, 19th December 2009, svn revision 1738.\r
122   - fixed subtle queue bug, which also affected ringbuffer\r
123     and caused data re-ordering under high load\r
124   - added benchmarks for freelist, ringbuffer and stack\r
125 \r
126 release 6, 29th December 2009, svn revision 1746.\r
127   - fixed two implementation errors, which reduced performance,\r
128     spotted by Codeplug from "http://cboard.cprogramming.com".\r
129 \r
130 release 6.0.0, 18th December 2012, svn revision 2537\r
131   - introduction of namespaces, e.g. the "lfds600_" prefix\r
132     code otherwise COMPLETELY AND WHOLLY UNCHANGED\r
133     this release is a stepping-stone to 6.1.0\r
134 \r
135 release 6.0.1, 2nd January 2013, svn revision 3296\r
136   - bug fix where an enum wasn't moved into the new namespacing policy\r
137 \r
138 release 6.1.0, 31th December 2012, svn revision 2600\r
139   - fixed all existing non-enhancement bugs\r
140   - discovered some new bugs and fixed them too\r
141   - a very few minor changes/enhancements\r
142 \r
143 release 6.1.1, 2nd January 2013, svn revision 3297\r
144   - crucial bug fix where compiler barriers for atomic operations\r
145     were not brought over from 7.0.0 during backporting\r
146   - minor fix for abstraction tests, two missing store barriers\r
147 \r