是unique_ptr線程安全嗎?下面的代碼不可能兩次打印相同的數字嗎?是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;
}
「令人興奮的是,當如果發生這種情況,它也將導致整的雙重釋放。」它可能*。它可能不會。它可能導致根本不釋放該整數。它可能會導致兩個移動的版本都有指針值的一半。它可以做各種事情。 – 2012-07-14 17:29:23
的確,我對這個架構做了一些假設,而這些架構並沒有真正的保證。 – Useless 2012-07-14 19:05:26