boost::thread_specific_ptr не обнуляет значение
От: mgopshtein  
Дата: 07.06.09 09:36
Оценка:
Добрый день,

Имеем такой код как приведен внизу. Я ожидал что 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


Добавлена разметка — Кодт
thread_specific_ptr
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.