Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 38 стр.

UptoLike

Составители: 

38
Службы обмена сообщениями в QNX Neutrino копируют сообщение не-
посредственно из адресного пространства одного потока в адресное про-
странство другого без промежуточной буферизации. Скорость обмена со-
общениями определяется производительностью памяти и используемым
оборудованием. Следующий программный фрагмент демонстрирует при-
мер использования примитивов передачи сообщений.
Пример. Обмен сообщениями.
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <sys/neutrino.h>
int chid; // идентификатор канала
/*********************************************************************************/
void *server() // поток сервера
{
int rcvd; // идентификатор принятого сообщения
char receive_buf[25]; // буфер для приема сообщения
char reply_buf[25]; // буфер для приема ответа
chid=ChannelCreate(0); // создание канала
sleep(1);
rcvd=MsgReceive(chid, &receive_buf, sizeof(receive_buf), NULL); // прием сообщения
printf ("Server thread: message <%s> has received \n", &receive_buf);
strcpy(reply_buf, "Strong answer from Server");
MsgReply(rcvd, 1500052, &reply_buf, sizeof(reply_buf)); // передача ответа
ChannelDestroy(chid); // уничтожить канал
pthread_exit(NULL);
}
/*********************************************************************************/
void *client() // поток клиента
{
int coid; // идентификатор соединения
int status; // статус ответного сообщения ( в данном случае 1500052)
pid_t PID;
char send_buf[25]; // буфер для передаваемого сообщения
char reply_buf[25]; // буфер для ответного сообщения
PID=getpid(); // получить программный идентификатор процесса
coid=ConnectAttach(chid,PID,1,0,0); // создать соединение
strcpy(send_buf, "It is very simple example");
Channel
Server
Client
Receive
queue
Send
queue
Reply
queue
Client
Множество
потоков может
ожидать на канале
Множество
клиентов может
ожидать на канале
Рис. 3.2