Участник:Qwerty787788/плюсы3сем — различия между версиями
(Новая страница: «== binding arguments of functions == === зачем это надо === === function objects === === function object binder (aka {boost,std}::bind) === === C++11 ...») |
(→multithreading) |
||
Строка 27: | Строка 27: | ||
== multithreading == | == multithreading == | ||
=== зачем это нужно === | === зачем это нужно === | ||
+ | Ну вроде бы очевидно: увеличить скорость выполнения программы. Однако, стоит понимать, что иногда скорость может только уменьшится (в интернете есть куча примеров). | ||
=== понятие race condition === | === понятие race condition === | ||
+ | Стандартный пример, как не нужно использовать multithreading. Пусть есть некоторые общие данные, а два потоки одновременно пытаются выполнить с ними какие-то операции. Например, есть переменная x = 0, два потока пытаются увеличить ее на 1. В итоге может получится как 1, так и 2 (так и вообще непонятно что, см. [http://en.wikipedia.org/wiki/Race_condition]). Вывод: нужно lock'ать данные перед тем, как их использовать. | ||
=== atomic operations === | === atomic operations === | ||
=== mutexes (mutex, recuirsive_mutex, shared_mutex) === | === mutexes (mutex, recuirsive_mutex, shared_mutex) === |
Версия 01:21, 18 января 2013
Содержание
- 1 binding arguments of functions
- 2 type erasure
- 3 signals (aka listeners aka observers)
- 4 exception safety
- 5 UNIX-signals (это не тоже самое что signals из пункта 3), hardware interrupts
- 6 multithreading
- 7 asynchronous operations
- 8 remote procedure call
- 9 fibers
- 10 С++11
- 11 C++1y and beyond
- 12 ranges
binding arguments of functions
зачем это надо
function objects
function object binder (aka {boost,std}::bind)
C++11 anonymous functions
type erasure
polymorphic function wrapper (aka {boost,std}::function)
any_iterator
boost::any
signals (aka listeners aka observers)
зачем это нужно
примеры почему наивная реализация не всегда хорошо работает
понятие reentrancy
пару слов про существующие реализации (boost::signals, boost::signals2, Qt Signals)
exception safety
зачем это нужно
RAII
ошибки и как их можно обрабатывать (propagation to caller, assertion, logging, precess termination)
UNIX-signals (это не тоже самое что signals из пункта 3), hardware interrupts
зачем это нужно
reentrancy
multithreading
зачем это нужно
Ну вроде бы очевидно: увеличить скорость выполнения программы. Однако, стоит понимать, что иногда скорость может только уменьшится (в интернете есть куча примеров).
понятие race condition
Стандартный пример, как не нужно использовать multithreading. Пусть есть некоторые общие данные, а два потоки одновременно пытаются выполнить с ними какие-то операции. Например, есть переменная x = 0, два потока пытаются увеличить ее на 1. В итоге может получится как 1, так и 2 (так и вообще непонятно что, см. [1]). Вывод: нужно lock'ать данные перед тем, как их использовать.