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

Reply via email to