Не думаю, что это слишком ясно, и один из рецензентов библиотеки сказал здесь :
Мне также не понравился тот факт, что только три раза было названо слово «нить».
Boost.signals2 хочет быть библиотекой «потокобезопасных сигналов». Поэтому еще немного
подробности и особенно больше примеров, касающихся этой области, следует
пользователь.
Один из способов выяснить это - перейти к источнику и посмотреть, что они используют _mutex / lock () для защиты. Тогда просто представьте, что произойдет, если бы этих звонков не было. :)
Исходя из того, что я могу собрать, это обеспечивает простые вещи, такие как "если один поток выполняет подключение или отключение, это не приведет к сбою другого потока, который итерирует через слоты, прикрепленные к этим сигналам". Вроде того, как использование поточно-ориентированной версии библиотеки времени выполнения C гарантирует, что если два потока одновременно совершат правильные вызовы printf
, то сбоя не будет. (Нельзя сказать, что полученный вами вывод будет иметь какой-то смысл & mdash; вы по-прежнему отвечаете за семантику более высокого порядка.)
Это не похоже на Qt, в котором поток, на котором запускается код определенного слота, основан на «привязке потока» целевого слота (что означает, что испускание сигнала может вызвать запуск слотов во многих различных потоках). параллельно.) Но я думаю, что не поддерживает, поэтому "комбинаторы" boost :: signal могут делать такие вещи .