Участник: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

Содержание

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'ать данные перед тем, как их использовать.

atomic operations

mutexes (mutex, recuirsive_mutex, shared_mutex)

condition_variable

понятие dead lock

futures

TLS (thread local storage)

asynchronous operations

зачем это нужно

как это работает

механизмы предоставляемые ОС (select, poll, epoll, kqueue, IOCP)

remote procedure call

зачем это нужно

apartment threading model

reentrancy

достоинства/недостатки apartment threading model

free threaded threading model

достоинства/недостатки free threaded threading model

пару слов про реализации (COM, CORBA, D-Bus)

fibers

зачем это нужно

coroutines

generators

как это работает

FLS (fiber local storage)

С++11

см. http://gcc.gnu.org/projects/cxx0x.html

про каждую фичу надо говорить, зачем это нужно, как это работает

C++1y and beyond

static_if

modules

concepts

ranges

зачем это нужно

как это работает