можно ограничить максимальную длину, и тогда попытка put'а заблокирует поток, пока длина очереди не уменьшится.
Соответственно, если очередь пустая, попытка get'а заблокирует поток, пока в очередь что-то не положат
Но минимальная длина очереди, которую можно поставить, равна 1. А мне хочется иметь очередь нулевой длины.
То есть при попытке put'а сразу блокируется поток, пока другой поток не сделает get. Тогда объект сразу передается от одного к другому, не кладясь в очередь
Как реализовать?
Куда он будет "сразу" передаваться? Через магический "эфир"? Что бы передать из одного треда в другой надо сначала куда-то объект положить, что бы второй поток потом нашёл его там. Два потока могут общаться друг с другом только через что-то общее: память, файл, сокет. Нельзя просто так взять и передать как аргумент в функцию.
через condition variable можно сделать то, что тебе нужно
Нет. Сразу получателю
окей, через переменную внутри queue. да, на миллисекунду она будет ненулевой длины
Заблокировать вставку пока никто не прочитает вставляемый элемент.
Нет. Она будет нулевой длины между вставками, даже если никто не читает.
да, если блокировать правильно
А при конкурентной записи не будет проблем?
а не знаю, мне не надо xD
да, вообще хорошо бы сделать возможность конкурентной записи, на вид не звучит невозможно, но чет даже не знаю как подступиться. наверное, надо не на ивентах будет, а на кондишенах
Мням мням мням
не, эта в общем не работает
по идее решил проблему с конкурентными операциями — просто сделал локи для get и put
Подскажите как тема называется, пожалуйста
Material Deep Ocean
Обсуждают сегодня