Используйте std :: istream и std :: ostream между потоками без системных вызовов (pipe) - PullRequest
0 голосов
/ 06 октября 2019

Я ищу простой способ создания потока связи между потоками, используя семантику <iostream>. Я искал что-то вроде следующего:

#include <iostream>
#include <thread>

void thread1(std::istream from_main, std::ostream to_main) {
    std::string s;
    from_main >> s;
    to_main << "Received:" << s << std::endl;
}
int main() {
   std::istream from_thread;
   std::ostream to_thread;
   std::thread t(thread1, to_thread, from_thread);
   to_thread << "Hi-Thread\n";
   std::string s;
   from_thread >> s; // Received:Hi-Thread
   t.join();
}

Есть ли простой способ достичь этого без использования pipe, создания файловых дескрипторов и заполнения кода системными вызовами?

1 Ответ

2 голосов
/ 06 октября 2019

Похоже, что вам нужна очередь с одним производителем, с одним потребителем (SPSC), возможно без блокировки. Я бы начал с этого, и если вы чувствуете острую необходимость в создании синтаксического сахара, чтобы сделать operator<< означает spsc_queue::push_back, добавьте это позже. Не начинайте с точки зрения синтаксиса C ++ operator <<, а затем подумайте: «О, это значит std :: ostream», что приводит к «Давайте создадим пользовательский streambuf

Сохраняйте это простым. SPSC очередь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...