He solucionado el problema de la condición de carrera, helgrind ya no se queja, la culpa la tenía el método size en la línea while(num_producers_working != 0 || products.size() > 0)
la solución más simple pasa por meter a size dentro de una sección crítica:
Modificando así la línea anterior ahora: while(num_producers_working != 0 || stack_size(products) > 0)
la solución más simple pasa por meter a size dentro de una sección crítica:
Código [Seleccionar]
size_t stack_size(const stack<int> &obj ){
lock_guard<mutex> guardian(xmutex);
return obj.size();
}
Modificando así la línea anterior ahora: while(num_producers_working != 0 || stack_size(products) > 0)