Многопоточность в libevent - PullRequest
       20

Многопоточность в libevent

0 голосов
/ 08 февраля 2019

У меня есть один поток (Поток A) в статической библиотеке C, который создает libevent event_base после выполнения этого:

#ifdef WIN32
    evthread_use_windows_threads();
#else
    evthread_use_pthreads();
#endif

Эта статическая библиотека C является однопоточной и выполняет все libeventСама работа: добавление событий, диспетчеризация, основной цикл и т. д., все это делается из потока A.

Теперь у меня есть программа на C ++, которую я связываю с библиотекой выше, вызывающей функцию входа в библиотеку C изboost::thread, называемый потоком B.

В какой-то момент в моей программе на C ++ у меня есть еще один boost::thread, называемый потоком C, который попытается event_add использовать библиотеку C в цикле событий потока A, а затемнемедленно позвоните event_active.

Что бы я хотел увидеть после выполнения материала из темы C, это:

calling event_add from Thread C
calling event_active from Thread C
Processing events from Thread A
calling the event's handler from Thread A

Возможно, мы могли бы иметь Processing events from Thread A где-нибудь еще между этими строками,но наверняка у нас должна быть хотя бы 1 такая строка между event_active и event handler execution, верно?

Вместо этого я вижу следующее:

calling event_add from Thread X
calling event_active from Thread X
calling the event's handler from Thread A

Поток X - это другой идентификаторчем нить с но я догадываюсьss, это только из-за использования потоков наддува на вызывающем сайте C ++ и pthreads в библиотеке C или что-то еще, в любом случае это меня не беспокоит.

Мне также нравится тот факт, что моя основная цель здесь в порядке: запусксобытие из потока и обработка его из другого.

Но для моего собственного любопытства я не понимаю, почему я не вижу строки "обработка событий из потока A" до вызова обратного вызова обработчика?

Идентификаторы потоков были получены с pthread_self(), это было проверено на Linux, более конкретно на Ubuntu 18.04.

1 Ответ

0 голосов
/ 19 февраля 2019

Что это такое "Обработка событий из темы A" print Вы печатаете это сами you

...