Boost.Lockfree 扩展的 C++ 非标准库
#include <boost/lockfree/queue.hpp>
#include <boost/lockfree/spsc_queue.hpp>
#include <boost/lockfree/stack.hpp>
#include <boost/atomic.hpp>
- Boost.Lockfree样例代码:https://www.boost.org/doc/libs/1_70_0/doc/html/lockfree/examples.html
- 文档目录:https://www.boost.org/doc/libs/1_70_0/doc/html/lockfree.html
C++ 新标准 std::atomic数据结构类, 支持多线程并发读写
术语 atomic operations -- 指特定操作(内存读写访问)不允许被分割
参见最新的 C++11 atomic library standard
std::atomic<>::is_lock_free()
std::atomic<>::compare_exchange_weak();
std::atomic<>::compare_exchange_strong();
/* 定义atomic<int>类型的全局变量 X 和 Y: */
std::atomic<int> X(0);
std::atomic<int> Y(0);
int r1, r2;
void thread1()
{
X.store(1);
r1 = Y.load();
}
void thread2()
{
Y.store(1);
r2 = X.load();
}
1.术语 memory barriers
Howells 和 McKenney’s 在Linux内核中实现的内存屏障,参见网址:
http://www.kernel.org/doc/Documentation/memory-barriers.txt
2.术语 ABA Problem
参见维基百科词条 http://en.wikipedia.org/wiki/ABA_problem
多线程并发操作时,必须设法避免ABA问题
3.术语CAS
参见维基百科词条 https://en.wikipedia.org/wiki/Compare-and-swap
4.术语RMW
术语RMW和术语CAS也可以参考博客文章《An Introduction to Lock-Free Programming》,网址: https://preshing.com/20120612/an-introduction-to-lock-free-programming/
- Atomic Read-Modify-Write Operations
- Compare-And-Swap 循环处理
另外可参考 Geoff Langdale的文章《无锁式编程(Lock-Free Programming)》, 网址: https://www.cs.cmu.edu/~410-s05/lectures/L31_LockFree.pdf
其他术语
术语RCU = Read-Copy Update是Linux内核中定义的内存块并发读写防护工具. 参见维基百科词条 https://en.wikipedia.org/wiki/Read-copy-update
术语SPSC 和术语 MPMC
- SPSC = Single-Producer / Single-Consumer
双线程结构:单一生产者+单一消费者 - MPMC = many-Producer / many-Consumer
多线程结构:同时存在多个生产者+多个消费者
术语 sequential consistency
多线程并发乱序处理一组有序排列的数据,输出的结果中前后顺序可能被打乱,与原始顺序不一致。。。
网友评论