Ada 95 protected objects provide synchronization based on a data object rather than a thread of control. Protected operations can be procedures, functions and entries. Calls to protected procedures and entries are executed in mutual exclusion; no other operation of the same protected object can proceed in parallel when a protected procedure or entry is being executed. The functions can execute in parallel, but not when a protected procedure or entry of that object is executing. Functions are not permitted to affect the state of a protected object.