I created a task that reads some hardware (ADC) value’s and save the data into for example variable X.
Then i have some other tasks like the display, the SD logbook and the USB that needs this variable X only to be read.
I think it is not safe to do this without a semaphore because at the time a task is reading, it could be possible that the variable gets set with new data.
So in my opinion a binary semaphore would be suffice. The semaphore would only be set when the variable gets a write.
But, does it matter that there are several readers tasks that could be interrupting each others read? So if for example the logbook and display both requests at the same time variable X by using the same variable getDataX();