Przekazywanie wiadomości między wątkami w C


Próbuję zmusić wątek A do komunikowania się z wątkiem B. W tym celu muszę używać wiadomości między wątkami, ale próbuję znaleźć przykład kodu źródłowego, który wyjaśnia obsługę wiadomości.
Czy ktoś ma dobry link do jakiegoś przykładu kodu źródłowego (w C), który wyjaśnia przekazywanie wiadomości?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chociaż nie masz linku, możesz to zrobić na wiele sposobów.
  • Pierwsza to użycie gniazd. Właściwie nie jest to metoda, którą polecałbym, ponieważ jej poprawne działanie może wymagać sporo pracy.
  • Druga jest związana z pierwszą metodą i polega na użyciu czegoś, co nazywa się anonimowymi potokami.
  • Trzeci sposób, którego zwykle używam, jest „inspirowany” sposobem działania wiadomości w starym systemie operacyjnym Amigi: po prostu używaj skręcać http://en.wikipedia.org/wiki/Queue_(data_structure)... Ponieważ pamięć jest współdzielona między wątkami, łatwo jest przekazać po prostu wskaźniki. Użyj jednej kolejki na wątek. Pamiętaj tylko, aby zabezpieczyć kolejki czymś w rodzaju mutex http://en.wikipedia.org/wiki/Mutex .
  • Platforma, z której korzystasz, może mieć różne sposoby komunikacji. Wyszukaj w Google (na przykład) linux ipc .
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jedną bardzo prostym sposobem, który jest dość szybki w Linuksie, jest przynajmniej użycie gniazd TCP lub UDP do przesyłania wiadomości między wątkami. Jądro Linuksa jest całkiem sprytne i jeśli dobrze pamiętam, ominie stos sieciowy, czyniąc go dość szybkim. Wtedy nie musisz się martwić blokowaniem i różnymi innymi problemami, które są w większości rozwiązywane przez jądro. Powinien wystarczyć na zadanie domowe.
Lista zasobów Uri TCP/IP
Często zadawane pytania, samouczki, podręczniki, strony internetowe & amp; witryny i książki o TCP/IP
http://www.private.org.il/tcpip_rl.html
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Każdy wątek w procesie może zobaczyć całą pamięć innych wątków. Jeśli dwa wątki trzymają wskaźnik do tego samego miejsca w pamięci, oba mają do niego dostęp.
Poniżej znajduje się kod, ale nie został przetestowany.
struct MessageQueue
{
std::queue<std::string> msg_queue;
pthread_mutex_t mu_queue;
pthread_cond_t cond;
};{
// In a reader thread, far, far away...
MessageQueue *mq = <a pointer to the same instance that the main thread has>;
std::string msg = read_a_line_from_irc_or_whatever();
pthread_mutex_lock(&mq->mu_queue);
mq->msg_queue.push(msg);
pthread_mutex_unlock(&mq->mu_queue);
pthread_cond_signal(&mq->cond);
}{
// Main thread
MessageQueue *mq = <a pointer to the same instance that the main thread has>; while(1)
{
pthread_mutex_lock(&mq->mu_queue);
if(!mq->msg_queue.empty())
{
std::string s = mq->msg_queue.top();
mq->msg_queue.pop();
pthread_mutex_unlock(&mq->mu_queue);
handle_that_string(s);
}
else
{
pthread_cond_wait(&mq->cond, &mq->mu_queue)
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się