[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freedesktop-xorg
Subject:    Re: XDrawPoint(s) etc MT safe?
From:       Dennis Clarke <dclarke () blastwave ! org>
Date:       2018-10-17 19:53:23
Message-ID: f74d6b8e-3856-48f7-8c81-042fb37984d4 () blastwave ! org
[Download RAW message or body]


>>>
>>>       Something I had not thought of came up today. Could multiple threads
>>> call XDrawPoint() and then XFlush() ?  Suppose sixteen threads are
>>> dispatched to do some foo and each of them utters some XDrawPoint()
>>> calls and then XFlush()?  Is that remotely thread safe?
>>>
>>
>> Sorry, assume XInitThreads() is in place.  Am I stuck with using
>> XLockDisplay() and XUnlockDisplay() and really multiple threads can
>> not really do work simultaneously. That is the question.
> 
> Individual Xlib function calls are thread-safe, in that they internally
> lock the Display while they're running to avoid multiple threads
> modifying the Display state. Note how the first thing XDrawPoint does
> is call LockDisplay:
> 
> https://gitlab.freedesktop.org/xorg/lib/libx11/blob/master/src/DrPoint.c#L36
>

Beauty. So I don't really need to call XLockDisplay or XUnlockDisplay
inside any given thread.  Looks redundant. That helps.

> So if you had two threads calling XDrawPoint in parallel, the second
> one would block at that LockDisplay until the first one was done.

Perfect ... thank you!

> You only need XLockDisplay() if you're trying to establish an atomic
> sequence of actions with respect to your sibling threads. For example,
> if one thread was doing XQueryTree in a loop, and another was creating
> and destroying windows, you could end up with a sequence like:
> 
> Thread A creates window 1
> Thread B queries for the root window's children, learns window 1
> Thread A destroys window 1
> Thread B queries for window 1's children, gets BadWindow

ah yes .. well I hope to never have a thread do anything like that.

Thank you.

Dennis




_______________________________________________
xorg@lists.x.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: https://lists.x.org/mailman/listinfo/xorg
Your subscription address: %(user_address)s
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic