> From: Rene Rivera <[EMAIL PROTECTED]>
> [2003-01-08] William E. Kempf wrote:
> >> From: Rene Rivera <[EMAIL PROTECTED]>
> >> [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 ;-)

I have no problems with that, necessarily, but how would you use this?  What benefits 
does it provide?  Would this be in addition to the _documented_ PP symbols?
 
> >> 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.

That doesn't necessarily speak for an ID type in addition to boost::thread.  It only 
adds another requirement that could be met by boost::thread itself.  Either an 
operator<(), knowing that the ordering is arbitrary, or follow the same route as 
std::type_info and include a before().  Thoughts?
 


William E. Kempf
[EMAIL PROTECTED]

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

Reply via email to