Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r58442 - sandbox/fiber/libs/fiber/doc
From: oliver.kowalke_at_[hidden]
Date: 2009-12-17 17:50:59


Author: olli
Date: 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
New Revision: 58442
URL: http://svn.boost.org/trac/boost/changeset/58442

Log:
- documentation updated

Text files modified:
   sandbox/fiber/libs/fiber/doc/fiber.qbk | 8 ++
   sandbox/fiber/libs/fiber/doc/fiber_ref.qbk | 2
   sandbox/fiber/libs/fiber/doc/spin_barrier.qbk | 20 +---
   sandbox/fiber/libs/fiber/doc/spin_condition_variables.qbk | 12 +-
   sandbox/fiber/libs/fiber/doc/spin_event_variables.qbk | 84 ++++++----------------
   sandbox/fiber/libs/fiber/doc/spin_fifos.qbk | 148 ++++++++++++++++-----------------------
   sandbox/fiber/libs/fiber/doc/spin_mutexes.qbk | 14 +-
   sandbox/fiber/libs/fiber/doc/spin_synchronization.qbk | 3
   sandbox/fiber/libs/fiber/doc/todo.qbk | 4
   9 files changed, 116 insertions(+), 179 deletions(-)

Modified: sandbox/fiber/libs/fiber/doc/fiber.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/fiber.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/fiber.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -39,6 +39,10 @@
 [template interrupt_link[link_text] [link fiber.fiber_management.fiber.interrupt [link_text]]]
 [template join_link[link_text] [link fiber.fiber_management.fiber.join [link_text]]]
 
+[template spin_barrier_link[link_text] [link fiber.spin_synchronization.barriers [link_text]]]
+[template spin_condition_link[link_text] [link fiber.spin_synchronization.conditions [link_text]]]
+[template spin_mutex_link[link_text] [link fiber.spin_synchronization.mutex_types.mutex [link_text]]]
+
 [template interr_enabled_link[link_text] [link fiber.fiber_management.this_fiber.interruption_enabled [link_text]]]
 [template interr_requested_link[link_text] [link fiber.fiber_management.this_fiber.interruption_requested [link_text]]]
 [template interr_point_link[link_text] [link fiber.fiber_management.this_fiber.interruption_point [link_text]]]
@@ -61,6 +65,10 @@
 [def __strategy__ [strategy_link ['strategy]]]
 [def __round_robin__ [round_robin_link ['round_robin]]]
 
+[def __spin_barrier__ [spin_barrier_link ['spin-barrier]]]
+[def __spin_condition__ [spin_condition_link ['spin-condition]]]
+[def __spin_mutex__ [spin_mutex_link ['spin-mutex]]]
+
 [def __cond_wait__ [cond_wait_link `wait()`]]
 [def __interrupt__ [interrupt_link `interrupt()`]]
 [def __join__ [join_link `join()`]]

Modified: sandbox/fiber/libs/fiber/doc/fiber_ref.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/fiber_ref.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/fiber_ref.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -721,7 +721,7 @@
 [note If the fiber is not thread-affine (using thread-local-storage) it can be migrated to a scheduler running in
 another thread.]
 
-[warning The current implementation on Windows uses the Win32 Fiber API which does not allow to migrate fibers
+[warning The current implementation for Windows uses the Win32 Fiber API which does not allow to migrate fibers
 to other threads.]
 
 Usally __scheduler__ will be invoked until all fibers are scheduled and finished.

Modified: sandbox/fiber/libs/fiber/doc/spin_barrier.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/spin_barrier.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/spin_barrier.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -12,38 +12,30 @@
 fibers reach the barrier they must wait until all `n` fibers have arrived. Once the `n`-th fiber has reached the
 barrier, all the waiting fibers can proceed, and the barrier is reset.
 
-[note __barrier__ is bound to a given __scheduler__ and can only be used by fibers managed by this scheduler.]
+[note __spin_barrier__ is ['not] bound to a __scheduler__ and can be used by fibers managed by different schedulers.]
 
 [section:barrier Class `barrier`]
 
- #include <boost/fiber/barrier.hpp>
+ #include <boost/fiber/spin/barrier.hpp>
 
     class barrier
     {
     public:
- template< typename Strategy >
- barrier( scheduler< Strategy > & sched, uint32_t initial);
+ barrier( uint32_t initial);
 
         bool wait();
     };
 
-Instances of __barrier__ are not copyable or movable.
-
-[section:constructor Constructor]
-
- template< typename Strategy >
- barrier( scheduler< Strategy > & sched, uint32_t initial);
+Instances of __spin_barrier__ are not copyable or movable.
 
+[section:constructor `barrier( uint32_t initial)`]
 [variablelist
 [[Effects:] [Construct a barrier for `initial` fibers.]]
 [[Throws:] [__invalid_argument__ if an error occurs.]]
 ]
 [endsect]
 
-[section:wait Member function `wait`]
-
- bool wait();
-
+[section:wait `bool wait()`]
 [variablelist
 [[Effects:] [Block until `initial` fibers have called `wait` on `*this`. When the `initial`-th fiber calls `wait`,
 all waiting fibers are unblocked, and the barrier is reset. ]]

Modified: sandbox/fiber/libs/fiber/doc/spin_condition_variables.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/spin_condition_variables.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/spin_condition_variables.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -5,7 +5,7 @@
   http://www.boost.org/LICENSE_1_0.txt).
 ]
 
-[section:conditions Condition Variables using spinwait]
+[section:conditions Condition Variables]
 
 [heading Synopsis]
 
@@ -14,7 +14,7 @@
 condition is not true, then the fiber then calls `wait` again to resume waiting. In the simplest case, this
 condition is just a boolean variable:
 
- boost::fibers::spin::condition cond;
+ boost::fibers::condition cond;
     boost::fibers::spin::mutex mtx;
     bool data_ready;
 
@@ -46,7 +46,7 @@
         retrieve_data();
         prepare_data();
         {
- boost::lock_guard< boost::fibers::mutex > lk( mtx);
+ boost::lock_guard< boost::fibers::spin::mutex > lk( mtx);
             data_ready = true;
         }
         cond.notify_one();
@@ -55,7 +55,7 @@
 Note that the same mutex is locked before the shared data is updated, but that the mutex does not have to be locked
 across the call to `notify_one`.
 
-[note __condition__ is [*not] bound to a __scheduler__ an can be used to synchronize fibers managed by different schedulers.]
+[note __spin_condition__ is ['not] bound to a __scheduler__ and can be used by fibers managed by different schedulers.]
 
 [section:condition Class `condition`]
 
@@ -70,12 +70,12 @@
         void notify_one();
         void notify_all();
 
- void wait( boost::unique_lock< boost::fibers::mutex > & lk);
+ void wait( boost::unique_lock< boost::fibers::spin::mutex > & lk);
 
         template< typename Pred >
         void wait( boost::unique_lock< boost::fibers::spin::mutex > & lk, Pred pred);
 
- template< typename LockType >
+ template< typename LockType >
         void wait( LockType & lk);
 
         template< typename LockType, typename Pred >

Modified: sandbox/fiber/libs/fiber/doc/spin_event_variables.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/spin_event_variables.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/spin_event_variables.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -5,17 +5,17 @@
   http://www.boost.org/LICENSE_1_0.txt).
 ]
 
-[section:eventvar_ref Event Variables using spinwait]
+[section:eventvar_ref Event Variables]
 
 [heading Synopsis]
 
 __boost_fiber__ provides event variables to facilitate coordination between fibers.
 A event-variable has two states `set` (`signaled`) or `reset` (`nonsignaled`).
 
-[note event-variables using spinwait are [*not] bound to a __scheduler__ an can be used to synchronize fibers
+[note event-variables are ['not] bound to a __scheduler__ and can be used by fibers
 managed by different schedulers.]
 
- boost::fibers::auto_reset_event ev;
+ boost::fibers::spin::auto_reset_event ev;
 
     void process_data();
 
@@ -44,6 +44,12 @@
 
 [section:auto_reset_event Class `auto_reset_event`]
 
+[heading Synopsis]
+
+When the ['auto_reset_event] gets signaled, any one fiber will see this particular signal. When a fiber observes
+the signal by waiting on the event, it is automatically transitioned back to non-signaled state. Any fibers can
+subsequently set the event.
+
     #include <boost/fiber/spin/auto_reset_event.hpp>
 
     class auto_reset_event : private boost::noncopyable
@@ -60,10 +66,7 @@
         bool try_wait();
     };
 
-[section:constructor `auto_reset_event()`]
-
- explicit auto_reset_event( bool isset = false);
-
+[section:constructor `explicit auto_reset_event( bool isset = false)`]
 [variablelist
 [[Effects:] [Constructs an object of class `auto_reset_event`. If isset is `true`
 the variable is set.]]
@@ -72,9 +75,6 @@
 [endsect]
 
 [section:destructor `~auto_reset_event()`]
-
- ~auto_reset_event();
-
 [variablelist
 [[Precondition:] [All fibers waiting on `*this` have been notified by a call to
 `set` (though the respective calls to `wait` need not have returned).]]
@@ -84,9 +84,6 @@
 [endsect]
 
 [section:set `void set()`]
-
- void set();
-
 [variablelist
 [[Effects:] [If any fibers are currently __blocked__ waiting on `*this` in a call
 to `wait`, unblocks one of those fibers.]]
@@ -95,9 +92,6 @@
 [endsect]
 
 [section:wait `void wait()`]
-
- void wait();
-
 [variablelist
 [[Effects:] [Blocks the current fiber. The fiber will unblock when notified by a call
 to `this->set()`. When the fiber is unblocked, the variable is reset before `wait`
@@ -108,9 +102,6 @@
 [endsect]
 
 [section:try_wait `bool try_wait()`]
-
- bool try_wait();
-
 [variablelist
 [[Effects:] [Returns `true` if the event variable is set otherwise `false`.]]
 [[Throws:] [Nothing.]]
@@ -122,6 +113,11 @@
 
 [section:manual_reset_event Class `manual_reset_event`]
 
+[heading Synopsis]
+
+The ['manual_reset_event] remains signaled until it is manually reset. Multiple fibers
+wait on the same event and observe the same signal.
+
     #include <boost/fiber/spin/manual_reset_event.hpp>
 
     class manual_reset_event : private boost::noncopyable
@@ -140,10 +136,7 @@
         bool try_wait();
     };
 
-[section:constructor `manual_reset_event()`]
-
- explicit manual_reset_event( bool isset = false);
-
+[section:constructor `explicit manual_reset_event( bool isset = false)`]
 [variablelist
 [[Effects:] [Constructs an object of class `manual_reset_event`. If isset is `true`
 the variable is set.]]
@@ -152,9 +145,6 @@
 [endsect]
 
 [section:destructor `~manual_reset_event()`]
-
- ~manual_reset_event();
-
 [variablelist
 [[Precondition:] [All fibers waiting on `*this` have been notified by a call to
 `set` (though the respective calls to `wait` need not have returned).]]
@@ -164,9 +154,6 @@
 [endsect]
 
 [section:set `void set()`]
-
- void set();
-
 [variablelist
 [[Effects:] [If any fibers are currently __blocked__ waiting on `*this` in a call
 to `wait`, unblocks those fibers. The variable remains signaled until `this->reset()`
@@ -176,9 +163,6 @@
 [endsect]
 
 [section:reset `void reset()`]
-
- void reset();
-
 [variablelist
 [[Effects:] [The event variable gets nonsignaled and fibers calling `this->wait()`
 will block.]]
@@ -187,9 +171,6 @@
 [endsect]
 
 [section:wait `void wait()`]
-
- void wait();
-
 [variablelist
 [[Effects:] [Blocks the current fiber. The fiber will unblock when notified by a call
 to `this->set()`. When the fiber is unblocked, the variable remains set.]]
@@ -199,9 +180,6 @@
 [endsect]
 
 [section:trywait `boo try_wait()`]
-
- bool try_wait();
-
 [variablelist
 [[Effects:] [Returns `true` if the event variable is set otherwise `false`.]]
 [[Throws:] [Nothing.]]
@@ -213,12 +191,17 @@
 
 [section:count_down_event Class `count_down_event`]
 
+[heading Synopsis]
+
+The ['count_down_event] decrements an internal counter (set in the constructor) and all
+waiting fibers are blocked until the count reaches zero.
+
     #include <boost/fiber/spin/count_down_event.hpp>
 
     class count_down_event : private boost::noncopyable
     {
     public:
- explicit count_down_event( uint32_t);
+ explicit count_down_event( uint32_t initial);
 
         ~count_down_event();
 
@@ -233,10 +216,7 @@
         void wait();
     };
 
-[section:constructor `count_down_event( uint32_t)`]
-
- explicit count_down_event( uint32_t initial);
-
+[section:constructor `explicit count_down_event( uint32_t initial)`]
 [variablelist
 [[Effects:] [Constructs an object of class `count_down_event` with initial value.]]
 [[Throws:] [Nothing.]]
@@ -244,9 +224,6 @@
 [endsect]
 
 [section:destructor `~count_down_event()`]
-
- ~count_down_event();
-
 [variablelist
 [[Precondition:] [All fibers waiting on `*this` have been notified by a call to
 `set` (though the respective calls to `wait` need not have returned).]]
@@ -256,9 +233,6 @@
 [endsect]
 
 [section:initial `uint32_t initial()`]
-
- uint32_t initial();
-
 [variablelist
 [[Effects:] [Returns the initial value the event variable was initialized with.]]
 [[Throws:] [Nothing.]]
@@ -266,9 +240,6 @@
 [endsect]
 
 [section:current `uint32_t current()`]
-
- uint32_t current();
-
 [variablelist
 [[Effects:] [Returns the value the variable currently holds.]]
 [[Throws:] [Nothing.]]
@@ -276,9 +247,6 @@
 [endsect]
 
 [section:is_set `bool is_set()`]
-
- bool is_set();
-
 [variablelist
 [[Effects:] [Returns `true` if the varaible has reached zero.]]
 [[Throws:] [Nothing.]]
@@ -286,9 +254,6 @@
 [endsect]
 
 [section:set `void set()`]
-
- void set();
-
 [variablelist
 [[Effects:] [Decrements the current count. If the count reaches zero and any fibers are
 currently __blocked__ waiting on `*this` in a call to `wait`, unblocks those fibers.
@@ -298,9 +263,6 @@
 [endsect]
 
 [section:wait `void wait()`]
-
- void wait();
-
 [variablelist
 [[Effects:] [Blocks the current fiber. The fiber will unblock when notified by a call
 to `this->set()` and the count of the event variable reaches zero. When the fiber is

Modified: sandbox/fiber/libs/fiber/doc/spin_fifos.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/spin_fifos.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/spin_fifos.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -5,65 +5,63 @@
           http://www.boost.org/LICENSE_1_0.txt
 ]
 
-[section:fifos (Un)Bounded fifos using spinwait]
+[section:fifos (Un)Bounded fifos]
 
 __boost_fiber__ provides a bounded and a unbounded fifo suitable to synchonize fibers via message passing.
 
-[note fifos are [*not] bound to a __scheduler__ an can be used to synchronize fibers
+[note fifos are ['not] bound to a __scheduler__ and can only be used by fibers
 managed by different schedulers.]
 
- typedef boost::fibers::unbounded_fifo< int > fifo_t;
+ typedef boost::fibers::spin::unbounded_fifo< int > fifo_t;
 
- void send( fifo_t fifo)
- {
- for ( int i = 0; i < 5; ++i)
- fifo.put( i);
- fifo.deactivate();
- }
-
- void recv( fifo_t fifo)
- {
- boost::optional< int > value;
- while ( fifo.take( value) )
- { std::cout << "received " << * value << std::endl; }
- }
-
- fifo_t fifo;
- sched.make_fiber( send, fifo);
- sched.make_fiber( recv, fifo);
-
- for (;;)
- {
- while ( sched.run() );
- if ( sched.empty() ) break;
- }
+ void send( fifo_t fifo)
+ {
+ for ( int i = 0; i < 5; ++i)
+ fifo.put( i);
+ fifo.deactivate();
+ }
+
+ void recv( fifo_t fifo)
+ {
+ boost::optional< int > value;
+ while ( fifo.take( value) )
+ { std::cout << "received " << * value << std::endl; }
+ }
+
+ boost::fibers::scheduler<> sched;
+ fifo_t fifo;
+ sched.make_fiber( send, fifo);
+ sched.make_fiber( recv, fifo);
+
+ for (;;)
+ {
+ while ( sched.run() );
+ if ( sched.empty() ) break;
+ }
 
 
 [section:unbounded_fifo Template `template< typename T > unbounded_fifo`]
 
- #include <boost/fiber/spin/unbounded_fifo.hpp>
+ #include <boost/fiber/spin/unbounded_fifo.hpp>
 
- template< typename T >
- class unbounded_fifo : private noncopyable
- {
- public:
- unbounded_fifo();
+ template< typename T >
+ class unbounded_fifo : private noncopyable
+ {
+ public:
+ unbounded_fifo();
 
- void deactivate();
+ void deactivate();
 
- bool empty();
+ bool empty();
 
- void put( T const& t);
+ void put( T const& t);
 
- bool take( boost::optional< T > & va);
+ bool take( boost::optional< T > & va);
 
- bool try_take( boost::optional< T > & va);
- };
+ bool try_take( boost::optional< T > & va);
+ };
 
 [section:constructor `unbounded_fifo()`]
-
- unbounded_fifo();
-
 [variablelist
 [[Effects:] [Constructs an object of class `unbounded_fifo`.]]
 [[Throws:] [Nothing.]]
@@ -71,9 +69,6 @@
 [endsect]
 
 [section:deactivate `void deactivate()`]
-
- void deactivate();
-
 [variablelist
 [[Effects:] [Deactivates the fifo. No values can be put after calling `this->deactivate`. Fibers blocked in
 `this->take()` will be return.]]
@@ -82,9 +77,6 @@
 [endsect]
 
 [section:empty `bool empty()`]
-
- bool empty();
-
 [variablelist
 [[Effects:] [Returns `true` if the fifo currently contains no data.]]
 [[Throws:] [Nothing.]]
@@ -92,9 +84,6 @@
 [endsect]
 
 [section:put `void put( T const& t)`]
-
- void put( T const& t);
-
 [variablelist
 [[Effects:] [Enqueues the value in the fifo and wakes up a fiber waiting for new data available from the
 fifo.]]
@@ -103,9 +92,6 @@
 [endsect]
 
 [section:take `bool take( boost::optional< T > & va)`]
-
- bool take( boost::optional< T > & va);
-
 [variablelist
 [[Effects:] [Dequeues a value from the fifo. If no data is available from the fifo the fiber gets suspended until
 new data are enqueued (return value `true` and va contains dequeued value) or the fifo gets deactiveted and
@@ -115,9 +101,6 @@
 [endsect]
 
 [section:try_take `bool try_take( boost::optional< T > & va)`]
-
- bool try_take( boost::optional< T > & va);
-
 [variablelist
 [[Effects:] [Dequeues a value from the fifo. If no data is available from the fifo the function returns `false`.
 Otherwise it returns `true` and `va` contains the dequed value.]]
@@ -130,41 +113,42 @@
 
 [section:bounded_fifo Template `template< typename T > bounded_fifo`]
 
- #include <boost/fiber/spin/bounded_fifo.hpp>
+ #include <boost/fiber/spin/bounded_fifo.hpp>
 
- template< typename T >
- class bounded_fifo : private noncopyable
- {
- public:
- bounded_fifo( std::size_t wm);
-
- bounded_fifo( std::size_t hwm, std::size_t lwm);
-
- void deactivate();
+ template< typename T >
+ class bounded_fifo : private noncopyable
+ {
+ public:
+ bounded_fifo( std::size_t wm);
 
- bool empty();
+ bounded_fifo( std::size_t hwm, std::size_t lwm);
 
- void put( T const& t);
+ void deactivate();
 
- bool take( boost::optional< T > & va);
+ bool empty();
 
- bool try_take( boost::optional< T > & va);
- };
+ void put( T const& t);
 
-[section:constructor `bounded_fifo()`]
+ bool take( boost::optional< T > & va);
 
- bounded_fifo( std::size_t wm);
+ bool try_take( boost::optional< T > & va);
+ };
 
+[section:constructor `bounded_fifo( std::size_t wm)`]
 [variablelist
 [[Effects:] [Constructs an object of class `bounded_fifo` which will contain a maximum of `wm` items.]]
 [[Throws:] [Nothing.]]
 ]
 [endsect]
 
-[section:deactivate `void deactivate()`]
-
- void deactivate();
+[section:constructor2 `bounded_fifo( std::size_t hwm, std::size_t lwm)`]
+[variablelist
+[[Effects:] [Constructs an object of class `bounded_fifo` which will contain a maximum of `hwm` items.]]
+[[Throws:] [Nothing.]]
+]
+[endsect]
 
+[section:deactivate `void deactivate()`]
 [variablelist
 [[Effects:] [Deactivates the fifo. No values can be put after calling `this->deactivate`. Fibers blocked in
 `this->take()` will be return.]]
@@ -173,9 +157,6 @@
 [endsect]
 
 [section:empty `bool empty()`]
-
- bool empty();
-
 [variablelist
 [[Effects:] [Returns `true` if the fifo currently contains no data.]]
 [[Throws:] [Nothing.]]
@@ -183,9 +164,6 @@
 [endsect]
 
 [section:put `void put( T const& t)`]
-
- void put( T const& t);
-
 [variablelist
 [[Effects:] [Enqueues the value in the fifo and wakes up a fiber waiting for new data available from the
 fifo. If the watermark has reached the fiber putting the value will be supended until at least one item
@@ -195,9 +173,6 @@
 [endsect]
 
 [section:take `bool take( boost::optional< T > & va)`]
-
- bool take( boost::optional< T > & va);
-
 [variablelist
 [[Effects:] [Dequeues a value from the fifo. If no data is available from the fifo the fiber gets suspended until
 new data are enqueued (return value `true` and va contains dequeued value) or the fifo gets deactiveted and
@@ -207,9 +182,6 @@
 [endsect]
 
 [section:try_take `bool try_take( boost::optional< T > & va)`]
-
- bool try_take( boost::optional< T > & va);
-
 [variablelist
 [[Effects:] [Dequeues a value from the fifo. If no data is available from the fifo the function returns `false`.
 Otherwise it returns `true` and `va` contains the dequed value.]]

Modified: sandbox/fiber/libs/fiber/doc/spin_mutexes.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/spin_mutexes.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/spin_mutexes.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -5,7 +5,7 @@
   http://www.boost.org/LICENSE_1_0.txt).
 ]
 
-[section:mutex_types Mutex Types using spinwait]
+[section:mutex_types Mutex Types]
 
 [section:mutex Class `mutex`]
 
@@ -16,19 +16,19 @@
     public:
         mutex();
         ~mutex();
-
+
         void lock();
         bool try_lock();
         void unlock();
 
- typedef unique_lock<mutex> scoped_lock;
+ typedef unique_lock< mutex > scoped_lock;
     };
 
-__mutex__ implements the __lockable_concept__ to provide an exclusive-ownership mutex. At most one fiber can own the
-lock on a given instance of __mutex__ at any time. Multiple concurrent calls to __lock_ref__, __try_lock_ref__ and
-__unlock_ref__ shall be permitted.
+__spin_mutex__ implements the __lockable_concept__ to provide an exclusive-ownership mutex. At most one fiber can own the
+lock on a given instance of __spin_mutex__ at any time. Multiple concurrent calls to __lock__, __try_lock__ and
+__unlock__ shall be permitted.
 
-[note __mutex__ is [*not] bound to a __scheduler__ and can be used to synchronize fibers
+[note __spin_mutex__ is ['not] bound to a __scheduler__ and can only be used by fibers
 managed by different schedulers.]
 
 [endsect]

Modified: sandbox/fiber/libs/fiber/doc/spin_synchronization.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/spin_synchronization.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/spin_synchronization.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -6,6 +6,9 @@
 ]
 
 [section:spin_synchronization Synchronization using spinwait]
+
+Synch. objects using spin-wait ops. reside in namespace `boost::fibers::spin`.
+
 [include spin_mutexes.qbk]
 [include spin_condition_variables.qbk]
 [include spin_barrier.qbk]

Modified: sandbox/fiber/libs/fiber/doc/todo.qbk
==============================================================================
--- sandbox/fiber/libs/fiber/doc/todo.qbk (original)
+++ sandbox/fiber/libs/fiber/doc/todo.qbk 2009-12-17 17:50:58 EST (Thu, 17 Dec 2009)
@@ -11,8 +11,8 @@
 
 * replace thread_specific_ptr by an specialiced implementation for fiber (interusive_ptr)
 
-* provide an scheduler which deals with priorities
-
 * replace implementation of atomic-ops by boost.atomic
 
+* provide an scheduler which deals with priorities
+
 [endsect]


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk