Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


projects:libcds:bounded_pool

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
projects:libcds:bounded_pool [2015/12/10 20:41] khizmaxprojects:libcds:bounded_pool [2015/12/17 11:25] khizmax
Line 20: Line 20:
 В настоящее время (libcds 2.1.0) в качестве пула в библиотеке используется [[http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue|алгоритм]] В настоящее время (libcds 2.1.0) в качестве пула в библиотеке используется [[http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue|алгоритм]]
 bounded очереди Дмитрия Вьюкова.  bounded очереди Дмитрия Вьюкова. 
-Он быстр, но имеет один существенный недостаток — иногда не обеспечивает [[https://en.wikipedia.org/wiki/Linearizability|атомарности]] операции:+Он быстр, но имеет один существенный недостаток — он не является линеаризуемым:
 при почти полной очереди ''push()'' может быть неудачным, хотя место в очереди ещё есть.  при почти полной очереди ''push()'' может быть неудачным, хотя место в очереди ещё есть. 
 То есть эта очередь не может стабильно работать в режиме «пул полон». То есть эта очередь не может стабильно работать в режиме «пул полон».
Line 26: Line 26:
 **Требуется**: найти/придумать и реализовать быстрый алгоритм lock-free/wait-free bounded pool: **Требуется**: найти/придумать и реализовать быстрый алгоритм lock-free/wait-free bounded pool:
  
-<code>+<code c++>
 template <typename T> template <typename T>
 class Pool class Pool
Line 45: Line 45:
 **Критерий корректности**: реализация должна успешно пройти такой тест на успешную работу в состоянии «пул почти полон» (псевдокод): **Критерий корректности**: реализация должна успешно пройти такой тест на успешную работу в состоянии «пул почти полон» (псевдокод):
  
-<code>+<code c++>
 Pool<void *> pool(256); Pool<void *> pool(256);
 std::atomic<size_t> nGetError(0); std::atomic<size_t> nGetError(0);
projects/libcds/bounded_pool.txt · Last modified: 2015/12/17 23:11 by khizmax