Examples that explains how to use condition variables.
This example shows the use of the global condition variable IPC mechanism. The scope of a global condition variable is inter-process. It can be shared by threads of any process in the system.
Download
Click on the following link to download the example: condvarglobal .zip
Click browse to view the example code
Class summary
RCondVar RMutex RChunk CPeriodic
Description
This example uses an adder and subtractor pattern to show the use of a global condition variable. Two processes, the adder and the subtractor, modify a shared variable by adding and subtracting random amounts. The condition variable ensures that the value remains within given limits, KMaxValue and KMinValue, by blocking one of the processes if the value crosses a warning threshold.
The adder program creates a global shared memory chunk. It also creates a global mutex to control access to the chunk and a global condition variable to signal that the value in the chunk is 'ready for use'. It then initialises the value in the chunk to zero and periodically tries to add a random value between 1 and 10 . If, having added a value, it finds that the value of the chunk is greater than KUpperThreshold, it waits for a signal from the condition variable before adding another value.
The subtractor program periodically tries to subtract a random value between 1 and 10 from the global shared memory chunk. If, having subtracted a value, it finds that the value of the chunk is less than KLowerThreshold, it waits for a signal from the condition variable before subtracting another value.
Design and implementation
Build
The ConditionVariable example builds the following binary files in the standard location (\epoc32\release\winscw\ <build_variant>) for Carbide.c++.
adder.exe: Demonstrates the use of the global condition variable. It creates a global shared memory chunk and periodically adds random values to the chunk.
subtractor.exe: Demonstrates the use of the global condition variable. It periodically subtracts random values from the chunk created by adder.exe.
How to run the Example
To run the example, perform the following steps:
This example shows the use of the local condition variable IPC mechanism. The scope of a local condition variable is intra-process. It can be shared by threads of the process that creates the condition variable.
Download
Click on the following link to download the example: condvarlocal .zip
Click browse to view the example.
Class summary
RMutex RThread CPeriodic RCondVar
Description
This example uses the producer and the consumer model to show the use of the local condition variable.
The example creates two local threads: a producer and a consumer. The two threads share a buffer, which is an object of the CQueue class. The CQueue object creates a local condition variable using the RCondVar::CreateLocal() function. It also defines the methods to insert and remove a token from the queue. The CQueue::Insert() function inserts a token into the queue and signals the condition variable. The CQueue::Remove() function tries to remove a token from the queue. If the queue is empty, it must wait for a signal from the condition variable.
An object of the CProducer class creates and calls the producer thread. The producer thread is called once every two seconds using an object of the CPeriodic class. This thread inserts a token into the queue when it is called. It calls the CQueue::Insert() function on the shared CQueue object.
An object of the CConsumer class creates and calls the consumer thread. The consumer thread is called once a second using an object of the CPeriodic class. This thread removes a token from the queue when it is called. It calls the CQueue::Remove() function on the shared CQueue object.
For more information, refer to Condition Variables.
Design and implementation
Build
The Symbian build process describes how to build this example. The ConditionVariable example builds the following binary files in the standard location (\epoc32\release\winscw\ <build_variant>) for Carbide.c++.
condvarlocal.exe: Demonstrates the use of the local condition variable.
How to run the Example
To run the example, perform the following steps:
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.