IMHO here:
1. Using CAS infers using busy-loop, e.g. "we are trying until
operation succeed". You might tolerate spinning there by using PAUSE
instruction or some other way.
2. How about "static int counter = 0; #define INC() counter++;"? It
will be done in runtime though.
Thanks,
Aleksey.
On Wed, Apr 9, 2008 at 3:57 PM, Alexei Fedotov <[EMAIL PROTECTED]> wrote:
> Hello folks,
> Could you please help?
>
> 1. Is it possible to add to a thread safe linked list using CAS
> without a busy loop?
>
> void add_site(LogSite* log_site) {
> LogSite** p_site_head = (LogSite**) &get_logger()->log_site;
> LogSite* old_value = *p_site_head;
> do {
> log_site->next = (LogSite*) old_value;
> (LogSite*) old_value = (LogSite*) apr_atomic_casptr((volatile
> void **) p_site_head,
> (void*) log_site, log_site->next);
> } while (old_value != log_site->next); // busy loop
> }
>
> 2. Is it possible to create an auto-increment macro within a
> compilation unit using C preprocessor?
>
> #define INC() ...
>
> INC() // == 1
> INC() // == 2
> ...
>
> Thank you for sharing your expertise.
> --
> With best regards,
> Alexei
>