Я пишу программу с потоками, взаимодействующими друг с другом с использованием каналов.В моей программе основной поток создает поток приложения и поток протокола.Для потока протокола созданы два канала, и он заблокирован для чтения по каналам.Поток приложения выполняет запись в один из каналов потока протокола.
Теперь у меня есть 3 потока (основной поток, 1 поток протокола, 1 поток приложения).После того, как поток приложения записывает в один из протокольных каналов, поток протокола не считывает данные немедленно.Он читает данные, если я нажимаю клавишу ввода дважды / трижды.Не уверен, что здесь происходит.
Синтаксис может быть не совсем правильным ... но просто дает представление
// application thread
char* data = new char[100];
for (i = 0; i < 100; ++i)
{
data[i] = 'm';
}
write(fd, &data, 100);
sleep(10);
//protocol thread
while(1)
{
char data1[100];
read(fd1, &data1, 100);
}
Почему поток протокола не читает данные сразу.Я видел, что нет никакой буферизации, связанной с каналами (fflush не помогает).Итак, что делает «ввод» (возврат), чтобы разблокировать поток и прочитать данные ..
Может кто-нибудь, пожалуйста, помогите мне с этим.Спасибо!