[2003-01-08] William E. Kempf wrote:

>
>> 
>> From: Rene Rivera <[EMAIL PROTECTED]>
>> Date: 2003/01/08 Wed PM 03:38:07 EST
>> To: Boost mailing list <[EMAIL PROTECTED]>
>> Subject: Re: [boost] Next revision of boost::thread
>> 
>> [2003-01-08] William E. Kempf wrote:
>> 
>> >I'd appreciate comments on the above design.  Specifically I have these
>> questions:
>> >
>> >
>> >* Are there concerns about using conditional compilation and optional
>> portions of the 
>> >library, as POSIX does?  I believe this is the only way Boost.Threads
and
>> the C++ 
>> >standard will be able to provide "portable" threading libraries that
don't
>> restrict 
>> >implementation to a least common denominator approach.
>> 
>> I rather dislike the conditional compilation solution. It makes it rather
>> harder to write portable code as it makes for doing conditional PP code
>> outside of the library. Would it not be preferable to throw some form of
>> "unimplemented"/"unsupported" exception? Another option would be a
discovery
>> interface to find out what's supported in the platform. Such a discovery
>> interface could be used with MPL to get the equivalent of PP.
>
>Note that we do throw exceptions in many cases where things aren't
supported.  However, 
>if a large category of functionality is not available, such as scheduling,
there's 
>reasons to prefer conditional compilation.  First, you can get rid of
unecessary code.  
>Second, you know from attempts to compile whether or not code can actually
be ported to 
>a given platform.  IOW, the exception approach is only useful when you can
compensate 
>for the lack of a feature at run time.

Yes, I can see how the exception approach is not ideal, not just for the
library but also for the user.

But as a user I would expect something other than an internal
"BOOST_THREAD_ATTRIBUTES_STACKSIZE" to tell me that setting the stacksize is
supported in the platform. At minimum I would expect a standard symbol, PP
or otherwise, that tells me if I can use that feature. I would much rather
see something like this... instead of a set of PP symbols:

struct thread_traits
{
#if defined(BOOST_THREAD_ATTRIBUTES_STACKSIZE)
    typedef attributes_stacksize yes_type;
    BOOST_STATIC_CONSTANT(bool, supports_attributes_stacksize = true);
#else
    typedef attributes_stacksize no_type;
    BOOST_STATIC_CONSTANT(bool, supports_attributes_stacksize = false);
#endif
#if defined(BOOST_THREAD_ATTRIBUTES_STACKADDR)
    typedef attributes_stackaddress yes_type;
    BOOST_STATIC_CONSTANT(bool, supports_attributes_stackaddress = true);
#else
    typedef attributes_stackaddress no_type;
    BOOST_STATIC_CONSTANT(bool, supports_attributes_stackaddress = false);
#endif
#if defined(BOOST_THREAD_PRIORITY_SCHEDULING)
    typedef priority_scheduling yes_type;
    BOOST_STATIC_CONSTANT(bool, supports_priority_scheduling = true);
#else
    typedef priority_scheduling no_type;
    BOOST_STATIC_CONSTANT(bool, supports_priority_scheduling = false);
#endif
};

... or something like that ;-)


>> Was there ever any consideration/discussion on exposing some form of
thread
>> ID? (appart from the implicit ID in operator==)
>
>Yes... but I'm still trying to determine the requirements for that.  If the
only usage 
>for an ID is for comparison, and for diagnostic messages, then all that's
missing in the 
>current proposed design is an operator<<(ostream).  Otherwise, what's
missing is an id() 
>method and an ID type.

The one place I would like to have such a thing it would have to be id().

I have one, very overused, place in my code where I have to iterate on a
list of objects, which have thread pointers to find the object given the
current thread. It would somewhat cleaner and easier to understand if I
could have a std::map<thread::ID,object*> instead.


-- grafik - Don't Assume Anything
-- [EMAIL PROTECTED] - [EMAIL PROTECTED]
-- 102708583@icq
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to