From: Alexander Terekhov (terekhov_at_[hidden])
Date: 2003-11-18 06:00:08
"Philippe A. Bouchard" wrote:
> Ha ha ha... I guess I should of mentionned the Alpha with its 2 pipelines
Alpha is dead.
> >> multithreaded environments. It looked like shared_count_x86_exp2.cpp
> >> coudn't run on multiple platforms.
> > Yeah. refcount<> (and compilers with not-rocket-science knowledge
> > of atomics with "hoist" and "sink" barriers... and that's no matter
> > how screwed is the hardware -- compilers may reorder "as well") is
> > the way to go. I guess.
> Before going further with those issues I would like to specify that most of
> the time we do not need to know the content of the integer; we only need to
> know whether it is null or not atomically... the machine instructions "dec
> [counter]" immediately followed by "jne" do that.
You don't really need "portable asm" for that. C++ aside for a moment,
[THR RC] #include <pthread.h>
int pthread_refcount_decrement(pthread_refcount_t *refcount);
int pthread_refcount_decrement_relmsync(pthread_refcount_t *refcount);
int pthread_refcount_decrement_acqmsync(pthread_refcount_t *refcount);
int pthread_refcount_decrement_nomsync(pthread_refcount_t *refcount);
These functions shall decrement the value of the reference count
specified by /refcount/. That is, the value 1 is subtracted from
the value of the reference count specified by /refcount/. When
the decremented value of the reference count is zero, the constant
PTHREAD_REFCOUNT_DROPPED_TO_ZERO shall be returned to the calling
The constant PTHREAD_REFCOUNT_DROPPED_TO_ZERO is defined in
<pthread.h> and its value shall be distinct from any other value
returned by these functions.
The results are undefined if these functions are called with a
reference count which has value zero.
The results are undefined if these functions are called with an
uninitialized reference count.
If successful, these functions shall return zero or
PTHREAD_REFCOUNT_DROPPED_TO_ZERO if the decremented value of
the reference count is zero. Otherwise, an error number shall
be returned to indicate the error.
pthread_refcount_decrement_nomsync() functions may fail if:
The object specified by /refcount/ is invalid.
The value of the referenced count specified by /refcount/
These functions shall not return an error code of [EINTR].
You can have them as normal functions (so that you can take an
address) plus macros or intrinsic/inline function and/or whatnot.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk