jld*_*ont 25 c++ thread-safety
C++中是否存在线程安全的非阻塞队列类?
可能是一个基本问题,但我很长一段时间没有做过C++ ......
编辑:删除STL要求.
asv*_*kau 17
假设你的CPU有双指针宽比较并交换(compxchg8b在486或更高,compxchg16b上最AMD64上[不存在于一些早期型号的英特尔])...有一种算法在这里.
更新:如果您不害怕做一些工作,那么将其转换为C++并不难.:P
该算法假设一个"带标记的指针"结构,如下所示:
// Be aware that copying this structure has to be done atomically...
template <class T>
struct pointer
{
T *ptr;
uintptr_t tag;
};
Run Code Online (Sandbox Code Playgroud)
然后你想lock cmpxchg{8|16}b用一些内联asm 包装说明...
也许那时你可以像这样编写队列节点:
template <class T>
struct queue_node
{
T value;
pointer<queue_node<T> > next;
};
Run Code Online (Sandbox Code Playgroud)
其余的或多或少是我链接到的算法的转录...
| 归档时间: |
|
| 查看次数: |
27445 次 |
| 最近记录: |