Количество сообщений в unbounded_buffer

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

1 ответ

Решение

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

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

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>,

Другие вопросы по тегам