> On Dec 19, 2020, at 7:04 PM, 单铭铭 <shanmingm...@itssky.com> wrote:
> 
> I'm reading live555's UsageEnvironment related source codes. And I note that 
> the implementation of EventTriggerId is u_int32_t, and every ID only has one 
> bit set on and others off. Now I have some questions (to the default provided 
> implementation of these classes):
> 
> (1). Does the default implementation can only handle different event triggers 
> no more than 32 at the same time?

Because the definition of “EventTriggerId” (in 
“UsageEnvironment/include/UsageEnvironment.hh”) is “u_int32_t”, *all* 
implementations (not just the default implementation) support no more than 32 
different event triggers.


> (2). Since the implementation is u_int32_t, and TaskScheduler::TriggerEvent 
> function may be called outside the event loop, is there any thread-safety 
> problem?

If “deleteEventTrigger()” (the only operation that clears an event trigger id 
bit) is called only from within the event loop thread, then the only potential 
problem is - as you note - that the “|=“ operation inside the implementation of 
"BasicTaskScheduler0::triggerEvent()” might not be atomic.  If this operation 
is not atomic, then, yes, it’s conceivable possible for the setting of an event 
trigger id bit to be ‘lost’, if another thread is also doing a “|=“ (on another 
bit) at the same time.


> Can I understand it as: The risk of a race condition is reduced, but it may 
> occur under some circumstances.

Yes, I believe so.  However, I think that this risk could be eliminated 
entirely by replacing the code
        fTriggersAwaitingHandling |= eventTriggerId;
with
        do {fTriggersAwaitingHandling |= eventTriggerId} while 
((fTriggersAwaitingHandling&eventTriggerId) == 0);

I might make this change in a future release of the code.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to