CondVar.h revision e9df6ba5a8fcccf306a80b1670b423be8fe7746a
15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/******************************************************************************
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Copyright (C) 2012 Broadcom Corporation
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Licensed under the Apache License, Version 2.0 (the "License");
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  you may not use this file except in compliance with the License.
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  You may obtain a copy of the License at:
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
128d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *  distributed under the License is distributed on an "AS IS" BASIS,
138d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *  See the License for the specific language governing permissions and
158d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *  limitations under the License.
168d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *
172aee48938c6f1a389879e8baa60e979b5b729148Sebastien Hertz ******************************************************************************/
182aee48938c6f1a389879e8baa60e979b5b729148Sebastien Hertz
192aee48938c6f1a389879e8baa60e979b5b729148Sebastien Hertz/******************************************************************************
208d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *
218d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang *  Encapsulate a condition variable for thread synchronization.
2271dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang *
238d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang ******************************************************************************/
248d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
258d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#pragma once
268d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#include <pthread.h>
278d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#include "Mutex.h"
288d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
298d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
3071dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuangclass CondVar
318d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang{
328d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuangpublic:
338d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    /*******************************************************************************
348d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    **
358d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    ** Function:        CondVar
3671dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang    **
3771dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang    ** Description:     Initialize member variables.
3871dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang    **
3971dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang    ** Returns:         None.
4071dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang    **
418d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    *******************************************************************************/
428d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    CondVar ();
438d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
448d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
458d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    /*******************************************************************************
468d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    **
478d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    ** Function:        ~CondVar
488d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    **
498d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    ** Description:     Cleanup all resources.
5071dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang    **
518d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    ** Returns:         None.
528d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang    **
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    *******************************************************************************/
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    ~CondVar ();
55f0b10c7b3de1a61e531d5775417c37fe42021ee4Elliott Hughes
56348bf15315b2da38964762d22955bd682359fff2Tsu Chiang Chuang
579a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes    /*******************************************************************************
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    **
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    ** Function:        wait
60bff9fb7e654a9fee9f7ef7f9ebf3c150da6d15f6Tsu Chiang Chuang    **
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    ** Description:     Block the caller and wait for a condition.
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    **
632d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes    ** Returns:         None.
642d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes    **
652d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes    *******************************************************************************/
669a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes    void wait (Mutex& mutex);
679a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes
689a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes
699a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes    /*******************************************************************************
709a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes    **
7121a5212937e9f06496eacc836d540123ea194ee7Brian Carlstrom    ** Function:        wait
729a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes    **
738435047d3e43a34ec1972a844737aa2102a570d6Brian Carlstrom    ** Description:     Block the caller and wait for a condition.
742d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes    **                  millisec: Timeout in milliseconds.
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    **
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    ** Returns:         True if wait is successful; false if timeout occurs.
77559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    **
78559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    *******************************************************************************/
79559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    bool wait (Mutex& mutex, long millisec);
80559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz
81559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz
82559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    /*******************************************************************************
83559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    **
84559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    ** Function:        notifyOne
85559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    **
86559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    ** Description:     Unblock the waiting thread.
87f0b10c7b3de1a61e531d5775417c37fe42021ee4Elliott Hughes    **
8831fe38c771ae6d717600f01eb577e8a4cd5ab378Elliott Hughes    ** Returns:         None.
8931fe38c771ae6d717600f01eb577e8a4cd5ab378Elliott Hughes    **
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    *******************************************************************************/
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    void notifyOne ();
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
93559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertzprivate:
94559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz    pthread_cond_t mCondition;
95966a5ab08d2b77b99ec0e43460598fd376262530Elliott Hughes};
968d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang