Use ANNOTATE_LOCK_ACQUIRE and ANNOTATE_LOCK_RELEASE to specify explicit locking. These annotations are simple executable statements you can put wherever is most convenient. For example:
if (synchronization_needed) ANNOTATE_LOCK_ACQUIRE(0); x = f(x, a); if (synchronization_needed) ANNOTATE_LOCK_RELEASE(0);
You must make sure you match the lock acquires and releases, and both occur in the same task. Your program will get synchronization errors if a task releases a lock that it does not own, or acquires a lock and fails to release it. You can acquire a lock in one function and release it in a different function, but it is a poor practice.