Добрый день,
Имеем такой код как приведен внизу. Я ожидал что get() вернет NULL после удаления thread_specific_ptr, а он помнит старое значение. Есть на то причины?
Спасибо.
#include <boost/thread/tss.hpp>
#include <boost/thread.hpp>
#include <unistd.h>
#include <iostream>
using namespace std;
boost::thread_specific_ptr<unsigned long> *pptr = NULL;
void do1() {
cout << "Creating TLS index\n";
pptr = new boost::thread_specific_ptr<unsigned long>;
sleep(5);
cout << "Replacing TLD index\n";
delete pptr;
pptr = new boost::thread_specific_ptr<unsigned long>;
}
void printval() {
unsigned long * val = pptr->get();
if (val == NULL) {
cout << "Got NULL value\n";
val = new unsigned long(42);
pptr->reset(val);
} else {
cout << "Got value: " << *val << endl;
}
}
void do2() {
for (int i = 0; i < 4; i++) {
sleep(2);
printval();
}
}
int main(int argc, char *argv[]) {
boost::thread t1(do1);
boost::thread t2(do2);
t1.join();
t2.join();
return 0;
}
OUTPUT:
Creating TLS index
Got NULL value
Got value: 42
Replacing TLD index
Got value: 42
Got value: 42
Добавлена разметка — Кодт