Thread starvation and resource saturation in atomicity functions?
David Daney
ddaney@avtrex.com
Mon Mar 31 19:56:00 GMT 2008
Chad Attermann wrote:
>
> Hello all. Late last year I posted a couple of questions about
> multi-threaded application hangs in Solaris 10 for x86 platforms, and
> about thread-safety of std::basic_string in general. This was an
> attempt to solve persistent problems I have been experiencing with my
> application hanging due to CPU utilization shooting to 100%, with the
> __gnu_cxx::__exchange_and_add function frequently making appearances at
> the top of the stack trace of several threads.
>
> I believe I have made a break-through recently and wanted to solicit the
> opinion of some experts on this. I seem to have narrowed the problem
> down to running my application as root versus an unprivileged user, and
> further isolated the suspected cause to varying thread priorities in my
> application. I have theorized that spin-locks in gcc, particularly in
> the atomicity __gnu_cxx::__exchange_and_add function, are causing higher
> priority threads to consume all available cpu cycles while spinning
> indefinitely waiting for a lower priority thread that holds the lock.
> Now I am already aware that messing with thread priorities is dangerous
> and often an excercise in futility, but I am surprised that something so
> elemental as an atomic test-and-set operation that may be used
> extensively throughout gcc could possibly be the culprit for all of the
> trouble I have been experiencing.
>
> More than anything I'm hoping for a sanity check on this, even if it's
> just to confirm what may be obvious to others; that modifying thread
> priorities is strictly off-limits except in extreme circumstances with
> careful control over what operations are performed. Or perhaps there's
> another solution that has eluded my searches, maybe a bug fix or some
> way of avoiding such spin-locks in gcc making varying thread-priorities
> viable and safe.
>
> Thanks in advance for any insight, and at the very least I hope that
> this will serve as a warning to others who might find themselves in the
> same situation.
>
I wonder if you are seeing either priority inversion or a deadlock.
As always, a small testcase would be useful.
David Daney
More information about the Gcc
mailing list