1 #ifndef __DALI_INTERNAL_CONDITIONAL_WAIT_H__
2 #define __DALI_INTERNAL_CONDITIONAL_WAIT_H__
5 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
31 * Helper class to allow conditional waiting and notifications between multiple threads.
38 * @brief Allows client code to synchronize updates to its own state with the
39 * internal state of a ConditionalWait object.
46 * @brief Will acquire the internal mutex of the ConditionalWait object passed in.
47 * @param[in] wait The ConditionalWait object to lock.
49 ScopedLock( ConditionalWait& wait );
53 * @brief Will release the internal mutex of the ConditionalWait object passed in.
58 * Getter for the ConditionalWait locked for this instance's lifetime.
59 * @return the ConditionalWait object currently locked.
61 ConditionalWait& GetLockedWait() const { return mWait; }
65 // Not implemented as ScopedLock cannot be copied:
66 ScopedLock( const ScopedLock& );
67 const ScopedLock& operator=( const ScopedLock& );
69 ConditionalWait& mWait;
73 * @brief Constructor, creates the internal synchronization objects
78 * @brief Destructor, non-virtual as this is not a base class
83 * @brief Notifies another thread to continue if it is blocked on a wait.
85 * Can be called from any thread.
86 * Does not block the current thread but may cause a rescheduling of threads.
91 * @brief Wait for another thread to notify us when the condition is true and we can continue
93 * Will always block current thread until Notify is called
98 * @brief Wait for another thread to notify us when the condition is true and we can continue
100 * Will always block current thread until Notify is called.
101 * Assumes that the ScopedLock object passed in has already locked the internal state of
102 * this object. Releases the lock while waiting and re-acquires it when returning
104 * param[in] scope A preexisting lock on the internal state of this object.
105 * @pre scope must have been passed this ConditionalWait during its construction.
107 void Wait( const ScopedLock& scope );
110 * @brief Return the count of threads waiting for this conditional
111 * @return count of waits
113 unsigned int GetWaitCount() const;
117 // Not implemented as ConditionalWait is not copyable
118 ConditionalWait( const ConditionalWait& );
119 const ConditionalWait& operator=( const ConditionalWait& );
121 struct ConditionalWaitImpl;
122 ConditionalWaitImpl* mImpl;
126 } // namespace Adaptor
128 } // namespace Internal
132 #endif // __DALI_INTERNAL_CONDITIONAL_WAIT_H__