Re: Threading in new C++ standard
On 3 =D0=BC=D0=B0=D0=B9, 00:06, "Chris Thomasson" <cris...@comcast.net> wrot=
e:
"Dmitriy V'jukov" <dvyu...@gmail.com> wrote in message
news:f4905e09-1344-4643-8033-5566409cfb76@25g2000hsx.googlegroups.com...
On 2 =C3=8D=C3=81=C3=8A, 01:08, "Chris Thomasson" <cris...@comcast.net> wr=
ote:
So you can't implement VZOOM object lifetime management in
autodetection mode, you need compiler_acquire_barrier and
compiler_release_barrier.
No way could I do highly platform dependant auto-detection with C++0x.=
You
can get it to work with signals, but that's a little crazy:
I am saying not about auto-detection logic itself, but about
vz_acquire()/vz_release() functions. I think they look something like
this:
void vz_acquire(void* p)
{
per_thread_rc_array[hash(p)] += 1;
compiler_acquire_barrier(); // <--------------
}
void vz_release(void* p)
{
compiler_release_barrier(); // <--------------
per_thread_rc_array[hash(p)] -= 1;
}
The question: will you have to manually implement and port to every
compiler compiler_acquire_barrier()/compiler_release_barrier()?
The implementation of the function which mutates the array is externally
compiled:
http://groups.google.com/group/comp.lang.c/browse_frm/thread/1d0b291e...
and I document that link-time optimization level should be turned down, or=
off... Oh well.
Link-time optimization can increase performance by 10-20%. And it's on
by default in release build of MSVC...
Btw, Joe Seigh in atomic-ptr uses following:
#define fence() __asm__ __volatile__ ("" : : : "memory")
#define smrnull(hptr) \
do { \
fence(); \
atomic_store(&hptr[0], 0); \
atomic_store(&hptr[1], 0); \
} while (0)
What do you think?
Dmitriy V'jukov