umd: sync taskQueue operations in Emulator using condition variables #203
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We had a synchronisation problem with the Emulator threads on our VP.
The first thread waits for 500ms until a task is pushed into the taskQueue. The second thread pushes a task in the taskQueue and waits until the first thread has processed the task using 'sched_yield'.
Because the first thread is still waiting (500ms), the scheduler repeatedly switches to the second thread, which yields its computation time.
Due to that the 500ms are simulated very slowly on our VP.
We synchronised the two threads using condition variables, such that the seconds thread notifies the first thread if he has pushed a task in the taskQueue and the first thread notifies the second one if he has processed the task. Both threads are also sensitive to the shutdown signal.