Messages in this thread | | | Date | Thu, 29 Nov 2007 00:07:55 +0100 | From | Jarek Poplawski <> | Subject | Re: Question regarding mutex locking |
| |
Jarek Poplawski wrote, On 11/28/2007 11:56 PM:
> Jarek Poplawski wrote, On 11/28/2007 11:45 PM: > >> Larry Finger wrote, On 11/28/2007 04:41 PM: >> >>> Andreas Schwab wrote: >>>> Larry Finger <Larry.Finger@lwfinger.net> writes: >>>> >>>>> If a particular routine needs to lock a mutex, but it may be entered with that mutex already locked, >>>>> would the following code be SMP safe? >>>>> >>>>> hold_lock = mutex_trylock() >>>>> >>>>> ... >>>>> >>>>> if (hold_lock) >>>>> mutex_unlock() >>>> When two CPUs may enter the critical region at the same time, what is >>>> the point of the mutex? Also, the first CPU may unlock the mutex while >>>> the second one is still inside the critical region. >>> Thank you for that answer. I think that I'm finally beginning to understand. >> Probably it would be faster without these "...", which look like >> no man's land... >> >> hold_lock = mutex_trylock() >> if (hold_lock) { >> /* SMP safe */ >> ... >> mutex_unlock() >> } else { >> /* SMP unsafe */
...But, not for sure! If our caller holds the lock and we can check this...
>> ... >> /* maybe try again after some break or check */ > > > OOPS! Of course, since it can be called with this lock held, > any break is not enough: we can only check if there is a > possibility that another thread is holding the lock. > >> } >> >> Regards, >> Jarek P. > >
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |