Discussion about "Threads, Events and QObjects" article

Page  
2

December 20, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

Volker wrote:
“how to start, stop, wait for a thread

This sounds very familiar to me (FYI: Win32/VCL).

December 20, 2010

peppe peppe
Ant Farmer
1028 posts

Ok, I changed the sentence to


how to start and stop a thread, and wait for it to finish, under (at least) one major operating system;

Thank you all for your feedback :)

 Signature 

Software Engineer
KDAB (UK) Ltd., a KDAB Group company

December 20, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

Another choice of terminology has me confused: reentrant. Thread-safe I understood, but the definition of reentrancy seemed not clearly demarcated from it. Maybe a slight reworking of the text could help for a better understanding of the difference.

December 20, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

Sorry for this naive comment. Finally I found that this is Qt terminology: http://doc.qt.nokia.com/latest/threads-reentrancy.html

December 20, 2010

Franzk Franzk
Lab Rat
834 posts

It is not just Qt terminology. It’s general programming terminology and something everyone who does at least the slightest bit of multi-threading should know about.

http://en.wikipedia.org/wiki/Reentrant_(subroutine)
http://en.wikipedia.org/wiki/Thread_safety

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

December 20, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

Franzk wrote:
…and something everyone who does at least the slightest bit of multi-threading should know about.
thx for the WP references :)

BTW: I did some multithreaded coding without problems, and without thinking about reentrance.

December 20, 2010

peppe peppe
Ant Farmer
1028 posts

To be honest, the little problem is that there might be some confusion due to literature and/or other toolkits. That’s why I specified that in the article I follow the Qt conventions; anyway, I added a link to http://doc.qt.nokia.com/latest/threads-reentrancy.html, just to make it even more clear :-)

 Signature 

Software Engineer
KDAB (UK) Ltd., a KDAB Group company

December 20, 2010

Franzk Franzk
Lab Rat
834 posts

It’s good. The basics are the same across libraries though (bad library if it diverges…).

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

December 21, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

After reading Reentrancy and Thread-Safety [doc.qt.nokia.com] , I think the term reentrance is not the best choice, because re-entering (in a sense of entering it twice) isn’t really possible. (My problem seems to be that I’m familiar with the non-reentrance of MS-DOS.)

Classes that can be safely used by different threads at different times, I would name just safe. To be honest, I would not discuss it at all, but rather mark those that cannot be used from different threads at different times, maybe as “tread-local” or so.

Am I completely wrong here?

December 21, 2010

Gerolf Gerolf
Robot Herder
3253 posts

Hi Wolf,
Thread-local is normally used for members/memory. So there is the ThreadLocalStorage [en.wikipedia.org] for example. Reentrant [en.wikipedia.org]) and thread-safety [en.wikipedia.org] are general terms (from my understanding) which are widely used. So I would stay with the used terms.

 Signature 

Nokia Certified Qt Specialist.
Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

December 21, 2010

peppe peppe
Ant Farmer
1028 posts

Wolf P. wrote:

Classes that can be safely used by different threads at different times, I would name just safe. To be honest, I would not discuss it at all, but rather mark those that cannot be used from different threads at different times, maybe as “tread-local” or so.

Am I completely wrong here?

There are three possible cases:

  • Classes/methods/objects/functions/data structures which (…whose instances) can be used at the same time from multiple threads, without the need of serializing cuncurrent accesses. That’s what thread-safe means.
  • Classes/methods/objects/functions/data structures which (…whose instances) cannot be used at the same time from multiple threads, therefore all accesses must be externally serialized. That’s what reentrant means. Notice that
    • Thread-safe implies reentrant
    • Taking a reentrant class and forcibly serializing all possible accesses with a mutex makes it thread-safe
  • Classes/methods/objects/functions/data structures which (…whose instances) cannot be used from multiple threads at all. There isn’t a specific name for this case (we usually say “not thread-safe nor reentrant”). For instance, QWidget and all of its subclasses are usable only from the main thread.
 Signature 

Software Engineer
KDAB (UK) Ltd., a KDAB Group company

December 21, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

Ok. The term reentrant (in the given context) is now clear to me.

But please note the following example: when you call the Win32 function SendMessage (sending to another process) and get reply-blocked, your process can be re-entered by SendMessage calls from other processes. So, for me, reentrance (in general) has also something to do with recursion.

December 21, 2010

Wolf P. Wolf P.
Ant Farmer
354 posts

I added a toc to the page. (and to the wiki syntax help [developer.qt.nokia.com] too)

December 21, 2010

Volker Volker
Ant Farmer
5428 posts

Unfortunately, the term “reentrancy” is not really clearly defined in computer world.

Michael Suess complains in his “blog entry:“http://www.thinkingparallel.com/2007/06/08/the-most-overused-word-in-parallel-programming-reentrancy/ about the situation. Reading the comments, it seems that there are at least two definitions of reentrancy in the context of single threading (regarding recursive function calls) and in the context of multi threading. This may confuse the people with a single threading background (DOS!) when heading over to multithreaded programming.

Anyways, the definitions are out in the wild and as long as we are in Qt context, we should use the terms defined by the Trolls to avoid further confusion. Otherwise we would need another round of BabelFishing for these kinds of things, but I doubt there’s any T-Shirts to win :-)

December 21, 2010

Franzk Franzk
Lab Rat
834 posts

Volker wrote:
but I doubt there’s any T-Shirts to win :-)
Huh, imagine T-shirts stating something about your re-entrancy…

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

Page  
2

  ‹‹ Wiki Addons with only links      [Suggestion] Wiki Comment ››

You must log in to post a reply. Not a member yet? Register here!