¿El subproceso unique_ptr es seguro? ¿Es imposible para el siguiente código imprimir el mismo número dos veces?¿Es seguro el hilo unique_ptr?
#include <memory>
#include <string>
#include <thread>
#include <cstdio>
using namespace std;
int main()
{
unique_ptr<int> work;
thread t1([&] {
while (true) {
const unique_ptr<int> localWork = move(work);
if (localWork)
printf("thread1: %d\n", *localWork);
this_thread::yield();
}
});
thread t2([&] {
while (true) {
const unique_ptr<int> localWork = move(work);
if (localWork)
printf("thread2: %d\n", *localWork);
this_thread::yield();
}
});
for (int i = 0; ; i++) {
work.reset(new int(i));
while (work)
this_thread::yield();
}
return 0;
}
"Emocionantemente, cuando y si esto sucede, también dará como resultado la doble liberación del número entero". Que podría*. Puede que no. Puede resultar en no liberar el entero en absoluto. Puede resultar en que ambas versiones movidas tengan la mitad del valor del puntero. Podría hacer todo tipo de cosas. –
Cierto, estaba haciendo algunas suposiciones sobre la arquitectura que no están realmente justificadas. – Useless