Skip to content
Snippets Groups Projects
Commit 6921210c authored by Florian Schmaus's avatar Florian Schmaus
Browse files

[SemaphoreWorkerSleepStrategy] Improve code comment

parent 3e01afe3
No related branches found
No related tags found
1 merge request!385[SemaphoreWorkerSleepStrategy] Improve code comment
......@@ -135,24 +135,24 @@ class AbstractSemaphoreWorkerSleepStrategy
[[nodiscard]] inline auto mustNotify() -> bool {
/* On external work we always increment the semaphore unless we observe
* that its value is > workerCount.
* If we observe semValue > workerCount we are ensured that some worker will iterate
* its dispatchLoop again and must observe the new work.
* For work from within emper we could skip wakeup if we observe no one sleeping.
* If we observe semValue > workerCount we know that some worker will iterate
* its dispatchLoop() again and hence will observe the new work.
*
* For work from within EMPER, we could skip wakeup() if we observe no one sleeping.
* This is sound because wakeupSleepingWorkers() is called from a active
* worker which will observe its own new work in its next dispatchLoop before
* worker which will observe its own new work in its next dispatchLoop() before
* going to sleep.
* BUT this supposed not harmful race may not be harmful for guarantying
* progress but it is harmfull for latency.
* BUT this supposed not harmful race may not be harmful for guaranteeing
* progress but it is harmful for latency.
* Inserting new work in the system races with workers about to sleep
* actually able to execute the work in a timely manner.
* The overhead of increasing the semaphore "to" much are unnessesary atomic
*
* The overhead of increasing the semaphore "to" much are unnecessary atomic
* operations on global state. This overhead was not measured in contrast to
* the harm caused to latency by beeing parsimonious when using the semaphore.
* Note that sem_getvalue() is allowed to return 0 if there are
* waiting workers, hence we need to set the threshold atleast to
*
* Note that sem_getValue() is allowed to return 0 if there are
* waiting workers, hence we need to set the threshold at least to
* 0. This has the disadvantage that we will perform one
* unnecessary sem_post. If we are sure the wakeupSem
* implementation does not return 0 with waiters,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment