Timer callback functions are not supposed to block ( https://www.freertos.org/RTOS-software-timer.html at the bottom) so having function1 actually block to get access can cause problems. It could check the semaphore with a zero block time to decide if it can use the data or not.
This doesn’t mean that the global data doesn’t need protection, depending on the nature of the accesses, you may well still need some form of protection.
If the updating action is short enough, you could use a critical section to protect it instead.