Ну, я не уверен, что ваша программа на самом деле должна делать, но, как правило, многопоточность просто полезна, если вы продвигаете независимые операции, такие как математическая формула, которая не требует ввода от любого другого процесса, который вы хотите обработать, потому что в любом другомВ этой ситуации поток должен ждать, пока этот процесс не сможет передать эти данные другому процессу, и, следовательно, вы рискуете потратить много процессорного времени.Но поскольку такие ситуации неизбежны, искусство создания потоков заключается в реализации вашей проблемы таким образом, чтобы такие ситуации были как можно более короткими и настолько редкими, насколько это возможно.
При реализации потоков также существует проблема двух нуждающихся потоков.одного ресурса (например, переменной), и можно, возможно, изменить его, когда другой поток читает его, и, следовательно, может быть обеспечено несогласованными данными (также ваша программа может работать совершенно иначе, если один поток быстрее, чем в другом, и наоборот).), это на самом деле называется состоянием гонки, и для предотвращения этого существуют мьютексы для предотвращения одновременного чтения и записи и определенные функции, позволяющие определенному потоку ожидать другого.
Я предполагаю, что один из этих двух сценариев происходит в вашей программе, и поэтому vallgrind сообщает вам об этих проблемах, поэтому на вашей позиции я бы прошел весь ваш код и фактически пересмотрел бы любую зависимость, которая существует или может быть между любой новойобъявление.И учитывая основную часть:
f2->connect(f1);
f3->connect(f1);
f4->connect(f2);
f5->connect(f3);
f6->connect(f4);
f6->connect(f5);
f7->connect(f3);
f8->connect(f6);
f8->connect(f7);
и
boost::unique_lock<boost::shared_mutex> lock(filterMutex_);
Я думаю, это может быть первый сценарий.
Эта ссылка может помочь в интерпретации вашего вывода vallgrind.В частности, часть «8.2.9. Отладка программ OpenMP» может быть интересна для вас, поскольку на самом деле очень похожий вывод приведен в качестве примера.
Здесь учебное пособие, которое, кажется, фактически проходит всеэти сценарии (и даже несколько других) и довольно хорошо объясняют, как использовать boost-threading.