Lunderberg commented on code in PR #13609:
URL: https://github.com/apache/tvm/pull/13609#discussion_r1060817672


##########
src/runtime/hexagon/hexagon_thread_manager.cc:
##########
@@ -265,9 +265,15 @@ void HexagonThreadManager::WaitOnThreads() {
 }
 
 void HexagonThreadManager::CheckSemaphore(unsigned syncID) {
+  // We want the success case to be fast, so do not lock the mutex

Review Comment:
   I think there's still a case where this could result in a race condition, 
though it's much less likely than before.  The race condition would occur 
between one thread that is reading `semaphores_[0]` inside 
`HexagonThreadManager::Signal`, while another thread is writing to 
`semaphores_[1]` inside `HexagonThreadManager::CheckSemaphore`.  The const 
methods of `std::unordered_map` are safe to run at the same time as other const 
methods, but aren't safe to run at the same time as non-const methods.
   
   I don't think we need to change anything now, but if we have mystery 
multi-threading bugs in the future, it may be worth revisiting.  The changes 
that we could make would be as follows:
   
   1. Change signature from `void CheckSemaphor(unsigned syncID)`, the function 
could instead be `qurt_sem_t* GetSemaphore(unsigned syncID)`.  This way, we 
don't need the call to `semaphores_[syncID]` inside 
`HexagonThreadManager::Signal` and `HexagonThreadManager::Wait`.
   2. Thread-local cache of the map from syncID to `qurt_sem_t*`.  The 
thread-local cache can be checked without a mutex, preserving the lockfree fast 
path.  If the thread-local cache doesn't have the desired semaphore, then a 
mutex can protect the global semaphore map, to either read from it (if already 
created on another thread) or write to it (if not already found).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to