William E. Kempf wrote:

> 
> Philippe A. Bouchard said:
>> William E. Kempf wrote:
>>
>> [...]
>>
>>> As already pointed out, to associate data with a thread you use
>>> thread_specific_ptr.  BTW, you still have to remember that the
>>> functor is copied, and data passed to/in the functor is not
>>> considered part of the thread in any event.
>>
>> Ok, how do you find out the data of the current thread?  The key in
>> boost::detail::tss is not the same as the one in boost::thread.
> 
> What data?  The actual thread data (there's not much, beyond the thread id
> which isn't direclty accessible) is found by calling the default c-tor on
> the thread.  The data passed in the functor is your responsibility.
> Either you explicitly pass it everywhere that's needed, or the thread
> stores it in a tss key.
> 

Suppose you have:

struct functor1
{
        list<void *> m_list;

        void operator () ()
        {
                ...
        }
};

struct functor2
{
        list<void *> m_list;

        void operator () ()
        {
                ...
        }
};

int main()
{
        thread f1(functor1());
        thread f2(functor2());

        ...

        // I would like to access m_list of the current thread's functor:

        lock()...
        if (thread() == f1 || thread() == f2)
        {
                thread()..(whatever casts)...m_list;
        }
        unlock()...

        // I think the only way to do this is by mapping the thread's id 
        //  with the object's address (map<key, functor1 *>) but there is
        //  no standard key publicly accessible and map<> creates overhead.
}



Regards,

-- 
Philippe A. Bouchard


_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to