Количество сообщений в unbounded_buffer - PullRequest
0 голосов
/ 08 августа 2011

Класс Concurrency::unbounded_buffer может хранить любое количество сообщений.Но как узнать количество ожидающих (не полученных) сообщений?

1 Ответ

2 голосов
/ 08 августа 2011

Для этого нет встроенной функциональности.

Что вы можете сделать, это атомно увеличить / уменьшить целое число рядом с ним, но знайте, что это не будет надежным счетом (только приблизительный), если к нему обращаются одновременно.

long count;
Concurrency::unbounded_buffer<T> buffer;

if(Concurrency::send(buffer, T()))
{
    long new_count = _InterlockedIncrement(&count);
}

И в других местах:

T value = Concurrency::receive(buffer);
long new_count = _InterlockedDecrement(&count);

Вы найдете функции _Interlocked в <intrin.h>.

...