Почему основной поток выходит из строя, когда дочерний поток вызывает функцию обратного вызова основного потока
Я пытаюсь понять некоторые основы многопоточности. Я написал простую программу, как показано ниже. Когда дочерний поток вызывает функцию обратного вызова, в основном потоке наблюдается сбой (здесь область действия функции обратного вызова находится в основном потоке. Насколько я понимаю, это и есть сфера применения. Но я предполагаю, что это что-то связанное с областью действия, которая ведет к краху)
#include <iostream> #include <thread> using namespace std; void t1_exec(void (*notfiy_func)()); void main_observer(); int main() { std::thread t1(t1_exec, main_observer); int i = 0; while (i < 200) { i++; cout << "In main thread" << endl; } return (0); } void t1_exec(void (*notify_func)()) { int i = 0; while (i < 5) { i++; cout << "Inside T1" << endl; } notify_func(); } void main_observer() { cout << "Inside Observer" << endl; exit(1); }
Что я уже пробовал:
Попробовал увеличить время выполнения основного потока за счет увеличения количества циклов (то есть увеличил i до 2000). Но это все равно не помогло остановить крэша.
Leo Chapiro
Что такое void *notfiy_func() ? Где это объявлено? Я пропустил это в вашем коде ...
Richard MacCutchan
Это имя параметра для t1_exec
.
Richard MacCutchan
Я только что попробовал ваш код, и он работает нормально, без сбоев, и оба потока завершаются нормально.