samples/synchronization: fix thread b pinning
This commit adds a brief thread b suspend while the sample sets its affinity mask. If the call to `k_thread_cpu_pin` is being made while the thread is actively running, then we get `-EINVAL` and the affinity mask is left unchanged. Signed-off-by: Filip Kokosinski <fkokosinski@antmicro.com>
This commit is contained in:
parent
39a70be4a0
commit
81cb80d923
1 changed files with 9 additions and 0 deletions
|
|
@ -110,7 +110,16 @@ int main(void)
|
||||||
#if PIN_THREADS
|
#if PIN_THREADS
|
||||||
if (arch_num_cpus() > 1) {
|
if (arch_num_cpus() > 1) {
|
||||||
k_thread_cpu_pin(&thread_a_data, 0);
|
k_thread_cpu_pin(&thread_a_data, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Thread b is a static thread that is spawned immediately. This means that the
|
||||||
|
* following `k_thread_cpu_pin` call can fail with `-EINVAL` if the thread is
|
||||||
|
* actively running. Let's suspend the thread and resume it after the affinity mask
|
||||||
|
* is set.
|
||||||
|
*/
|
||||||
|
k_thread_suspend(thread_b);
|
||||||
k_thread_cpu_pin(thread_b, 1);
|
k_thread_cpu_pin(thread_b, 1);
|
||||||
|
k_thread_resume(thread_b);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue