Книга: Real-Time Concepts for Embedded Systems
7.7.3 Interlocked, Two-Way Data Communication
7.7.3 Interlocked, Two-Way Data Communication
Sometimes data must flow bidirectionally between tasks, which is called interlocked, two-way data communication (also called full-duplex or tightly coupled communication). This form of communication can be useful when designing a client/server-based system. A diagram is provided in Figure 7.8.
Figure 7.8: Interlocked, two-way data communication.
Listing 7.2: Pseudo code for interlocked, one-way data communication.
tSourceTask() {
:
Send message to message queue
Acquire binary semaphore
:
}
tSinkTask () {
:
Receive message from message queue
Give binary semaphore
:
}
In this case, tClientTask sends a request to tServerTask via a message queue. tServer-Task fulfills that request by sending a message back to tClientTask.
The pseudo code is provided in Listing 7.3.
Listing 7.3: Pseudo code for interlocked, two-way data communication.
tClientTask () {
:
Send a message to the requests queue
Wait for message from the server queue
:
}
tServerTask () {
:
Receive a message from the requests queue
Send a message to the client queue
:
}
Note that two separate message queues are required for full-duplex communication. If any kind of data needs to be exchanged, message queues are required; otherwise, a simple semaphore can be used to synchronize acknowledgement.
In the simple client/server example, tServerTask is typically set to a higher priority, allowing it to quickly fulfill client requests. If multiple clients need to be set up, all clients can use the client message queue to post requests, while tServerTask uses a separate message queue to fulfill the different clients’ requests.
- Информация заголовочной страницы (Database header)
- Database dialect
- DATABASE CACHE SIZE
- Data sending and control session
- SCTP DATA chunk
- Integrated Secure Communications System
- Data Binding Using the GridView Control
- Interbase DataPump
- GetDataBack
- Работа с DataRow
- 4 A few ways to use threads
- 16.8. Реализация отношений в Core Data