cvs commit: src/lib/libthr/thread
thr_mutex.c src/lib/libkse/thread thr_mutex.c src/include pthread.h
David Xu
bsddiy at 126.com
Tue Oct 30 16:25:06 PDT 2007
Ken Smith wrote:
> On Tue, 2007-10-30 at 21:16 +0800, David Xu wrote:
>> Kris Kennaway wrote:
>>> PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP is just in <pthread.h>.
>>>
>>> /*
>>> * Static initialization values.
>>> */
>>> #define PTHREAD_MUTEX_INITIALIZER NULL
>>> #define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP NULL
>>> #define PTHREAD_COND_INITIALIZER NULL
>>> #define PTHREAD_RWLOCK_INITIALIZER NULL
>>>
>>>>>> I remembered mysql uses this macro to initialize spin mutex, and you
>>>>>> indead needs a patch to let it work
>>>>>
>>>>> No, with the code I committed mysql detects and uses it out of the
>>>>> box, without requiring any patches. It is easy to measure the
>>>>> resulting 30% performance improvement at high loads ;-)
>>>>>
>>>> see above, I didn't see any code set PTHREAD_MUTEX_ADAPTIVE_NP type.
>>> The code is already in mysql for use with glibc. It basically does
>>>
>>> #ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
>>> /*
>>> * Use PTHREAD_MUTEX_ADAPTIVE_NP for the mutexes we know will benefit
>>> * from it
>>> */
>>> ...
>>> #endif
>>>
>>> so it just works.
>>>
>> I can not find code in libthr setting mutex's member field m_type to
>> PTHREAD_MUTEX_ADAPTIVE_NP by your change, so how can it work as
>> expected ?
>>
>
> Wouldn't you expect that it's mysql that's setting the mutex's member
> field? Something like this chunk of code from mysql perhaps?
>
> #ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
> /*
> Set mutex type to "fast" a.k.a "adaptive"
>
> In this case the thread may steal the mutex from some other thread
> that is waiting for the same mutex. This will save us some
> context switches but may cause a thread to 'starve forever' while
> waiting for the mutex (not likely if the code within the mutex is
> short).
> */
> pthread_mutexattr_init(&my_fast_mutexattr);
> pthread_mutexattr_settype(&my_fast_mutexattr,
> PTHREAD_MUTEX_ADAPTIVE_NP);
> #endif
>
Yes, I saw the code before. but PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
also can be used as:
pthread_mutex_t mymutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
The above line initializes a mutex as adaptive mutex, but our
PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP is defined as NULL, so obviously
it creates a confusion from begin, it is wrong.
Regards,
David Xu
More information about the cvs-src
mailing list