Boost logo

Boost :

From: vicente.botet (vicente.botet_at_[hidden])
Date: 2008-06-19 18:01:30


Hello,

Boost.thread has already a non portable interface to get the thread handle
class thread {
public:
    ...
    typedef np_native_handle_type native_handle_type;
    native_handle_type native_handle();
    ...
};

Boost.Thread do not allow to pass thread attributes on the thread
constructor. I supose that this is due to portable issues. Could we
identifiy which attributes are portable and which one not?

The portable attributes (as stack size, ...) can be grouped on a
thread_attributes class.

In order to be able to pass whatever attribute to the thread constructor we
can add the setting of non portable attributes to this thread_attributes
class, and making the thread constructor take a thread_attributes in
addition to the existing parameters.

class thread {
public:
    class thread_attributes {
        // portable attributes

    public:
        // set/get of attributes
        // ..
#if defined(BOOST_THREAD_PLATFORM_WIN32)
// ... window version
#elif defined(BOOST_THREAD_PLATFORM_PTHREAD)
private:
    pthread_attr_t native_attributes;
public:
    set_np_attributes(const pthread_attr_t* h);
    // ... other
#else
#error "Boost threads unavailable on this platform"
#endif
    };
    thread(const thread_attributes*p, F f,A1 a1);
...

};

The portable application needing some specific configuration can construct
portable threads using the following schema

        thread::thread_attributes attr;
        // set portable attributes
        // ...
    #if defined(BOOST_THREAD_PLATFORM_WIN32)
        // ... window version
    #elif defined(BOOST_THREAD_PLATFORM_PTHREAD)
        // ... pthread version
        pthread_attr_t native_attributes;
        pthread_attr_init(&native_attributes);
        pthread_attr_setstacksize(&native_attributes, 1000000);
        attr.set_np_attributes(&native_attributes);
    #else
    #error "Boost threads unavailable on this platform"
    #endif
        thread th(attr, f,ctx);

What do you think?

Vicente


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk