estoy recibiendo un error de C++ con rosca:C++ terminar el arrendamiento llama sin excepción activa
terminate called without an active exception
Aborted
Aquí está el código:
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
template<typename TYPE>
class blocking_stream
{
public:
blocking_stream(size_t max_buffer_size_)
: max_buffer_size(max_buffer_size_)
{
}
//PUSH data into the buffer
blocking_stream &operator<<(TYPE &other)
{
std::unique_lock<std::mutex> mtx_lock(mtx);
while(buffer.size()>=max_buffer_size)
stop_if_full.wait(mtx_lock);
buffer.push(std::move(other));
mtx_lock.unlock();
stop_if_empty.notify_one();
return *this;
}
//POP data out of the buffer
blocking_stream &operator>>(TYPE &other)
{
std::unique_lock<std::mutex> mtx_lock(mtx);
while(buffer.empty())
stop_if_empty.wait(mtx_lock);
other.swap(buffer.front());
buffer.pop();
mtx_lock.unlock();
stop_if_full.notify_one();
return *this;
}
private:
size_t max_buffer_size;
std::queue<TYPE> buffer;
std::mutex mtx;
std::condition_variable stop_if_empty,
stop_if_full;
bool eof;
};
modelé mi código en torno a este ejemplo: http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html
¿Qué estoy haciendo mal y cómo soluciono el error?
¿Estás 'join'ing todos tus hilos en tu programa principal? –
Muéstranos el resto del código. – Matt
@Kerrek ah ha solucionado el problema, no tengo idea de por qué, aunque estoy seguro de que el hilo principal no terminaba antes de que los trabajadores terminaran. También mis alogoritos de bloqueo se ven bien? – 111111