reentrant functions, 32 bit vars and mutex

joe_her wrote on Sunday, June 14, 2015:

Assume a function that is called from 2 different unrelated tasks.
If the function is fully reentrant (no static or global vars), is it safe to use without a mutex?
if the function uses a global var, which is set only at initialization, and then is read only, is it safe to call from 2 different tasks?
in a 32 bit system (STM32F4) is it safe to read/write to 32 bit variable from 2 different tasks without a mutex (I assume 32 bit write is an atomic operation).

Thanks
Johanan

davedoors wrote on Sunday, June 14, 2015:

If the function is fully reentrant (no static or global vars), is it safe to use without a mutex?

yes

if the function uses a global var, which is set only at initialization, and then is read only, is it safe to call from 2 different tasks?

yes

in a 32 bit system (STM32F4) is it safe to read/write to 32 bit variable from 2 different tasks without a mutex (I assume 32 bit write is an atomic operation).

It is ok for one task to read the variable and one task to write the variable, but not normally for more than one task to write the variable. On an STM32F4 an operation like ++, --, +=, *, etc is not atomic, but actually a read-modify-write operation. Look as the asm code to see why.

joe_her wrote on Sunday, June 14, 2015:

Thanks Dave.