doc ru, printf() before assert in containers
This commit is contained in:
@@ -22,51 +22,82 @@
|
||||
#include "pithread.h"
|
||||
|
||||
|
||||
/*! \class PIThreadPoolLoop
|
||||
* \brief Thread class
|
||||
* \details This class allow you parallelize loop.
|
||||
*
|
||||
* \section PIThreadPoolLoop_sec0 Usage
|
||||
* This class designed to replace "for(;;)" statement in very simple way.
|
||||
* In constructor several threads created, then by "setFunction()" method
|
||||
* you should pass body of your loop, and then call "start()" or "exec()".
|
||||
* Every thread take loop counter and execute your function until all
|
||||
* counter range is passed.
|
||||
*
|
||||
* Example:
|
||||
\code{.cpp}
|
||||
PIVector<int> data(10, [](int i)->int{return i;});
|
||||
|
||||
piCout << data; // {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||||
|
||||
PIThreadPoolLoop pool;
|
||||
pool.exec(0, data.size(), [&](int i){ // parallel analogue "for (int i = 0; i < data.size(); i++)"
|
||||
data[i] = data[i] + 10;
|
||||
});
|
||||
|
||||
piCout << data; // {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
|
||||
\endcode
|
||||
*
|
||||
* Equivalent to:
|
||||
\code{.cpp}
|
||||
PIVector<int> data(10, [](int i)->int{return i;});
|
||||
|
||||
piCout << data; // {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||||
|
||||
pool.setFunction([&](int i){
|
||||
data[i] = data[i] + 10;
|
||||
});
|
||||
pool.exec(0, data.size());
|
||||
|
||||
piCout << data; // {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
|
||||
\endcode
|
||||
*
|
||||
* \section PIThreadPoolLoop_sec1 Important
|
||||
* Due to multithreading it`s very important to protect output data of loop body, use mutex.
|
||||
* Also remember that execution order is undefined and you shouldn`t use global variables in
|
||||
* your function. Use local variables and lambda capture.
|
||||
*
|
||||
*/
|
||||
//! \addtogroup Thread
|
||||
//! \{
|
||||
//! \class PIThreadPoolLoop pithreadpoolloop.h
|
||||
//! \~english Thread pool loop
|
||||
//! \~russian Пул потоков
|
||||
//!
|
||||
//! \~\details
|
||||
//! \~english
|
||||
//! This class allow you parallelize loop.
|
||||
//!
|
||||
//! \~russian
|
||||
//! Этот класс позволяет распараллелить цикл
|
||||
//!
|
||||
//!
|
||||
//! \~english \section PIThreadPoolLoop_sec0 Usage
|
||||
//! \~russian \section PIThreadPoolLoop_sec0 Использование
|
||||
//! \~english
|
||||
//! This class designed to parallel "for(;;)" statement in very simple way.
|
||||
//! In constructor several threads created, then by \a setFunction() method
|
||||
//! you should pass body of your loop, and then call \a start() or \a exec().
|
||||
//! Every thread take loop counter and execute your function until all
|
||||
//! counter range is passed.
|
||||
//!
|
||||
//! Example:
|
||||
//! \~russian
|
||||
//! Этот класс предназначен для распараллеливания цикла "for(;;)" максимально простым способом.
|
||||
//! В конструкторе создается несколько потоков, затем методом \a setFunction()
|
||||
//! устанавливается функция, представляющая собой тело цикла. Затем вызовом
|
||||
//! \a start() или \a exec() цикл исполняется параллельно. Каждый поток получает
|
||||
//! значение переменной цикла и вызывает функцию-тело до тех пор, пока
|
||||
//! весь диапазон не будет исполнен.
|
||||
//!
|
||||
//! Пример:
|
||||
//!
|
||||
//! \~\code{.cpp}
|
||||
//! PIVector<int> data(10, [](int i)->int{return i;});
|
||||
//!
|
||||
//! piCout << data; // {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||||
//!
|
||||
//! PIThreadPoolLoop pool;
|
||||
//! pool.exec(0, data.size(), [&](int i){ // parallel analogue "for (int i = 0; i < data.size(); i++)"
|
||||
//! data[i] = data[i] + 10;
|
||||
//! });
|
||||
//!
|
||||
//! piCout << data; // {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
|
||||
//! \endcode
|
||||
//!
|
||||
//! \~english Equivalent to:
|
||||
//! \~russian Эквивалентно:
|
||||
//! \~\code{.cpp}
|
||||
//! PIVector<int> data(10, [](int i)->int{return i;});
|
||||
//!
|
||||
//! piCout << data; // {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||||
//!
|
||||
//! pool.setFunction([&](int i){
|
||||
//! data[i] = data[i] + 10;
|
||||
//! });
|
||||
//! pool.exec(0, data.size());
|
||||
//!
|
||||
//! piCout << data; // {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
|
||||
//! \endcode
|
||||
//!
|
||||
//!
|
||||
//! \~english \section PIThreadPoolLoop_sec1 Important
|
||||
//! \~russian \section PIThreadPoolLoop_sec1 Важно
|
||||
//! \~english
|
||||
//! Due to multithreading it`s very important to protect output data of loop body, use mutex.
|
||||
//! Also remember that execution order is undefined and you shouldn`t use global variables in
|
||||
//! your function. Use local variables and lambda capture.
|
||||
//!
|
||||
//! \~russian
|
||||
//! В силу многопоточности очень важно защитить выходные данные тела цикла с помощью блокировок (мьютекса).
|
||||
//! Также стоит помнить, что последовательность выполнения неопределена, и не стоит использовать глобальных
|
||||
//! переменных в теле цикла. Используйте локальные переменные и захват в лямбде.
|
||||
//!
|
||||
//! \}
|
||||
|
||||
|
||||
PIThreadPoolLoop::PIThreadPoolLoop(int thread_cnt) {
|
||||
|
||||
Reference in New Issue
Block a user