Изменения

Перейти к: навигация, поиск

Участник:Qwerty787788/плюсы3сем

432 байта добавлено, 01:31, 18 января 2013
atomic operations
Стандартный пример, как не нужно использовать multithreading. Пусть есть некоторые общие данные, а два потоки одновременно пытаются выполнить с ними какие-то операции. Например, есть переменная x = 0, два потока пытаются увеличить ее на 1. В итоге может получится как 1, так и 2 (так и вообще непонятно что, см. [http://en.wikipedia.org/wiki/Race_condition]). Вывод: нужно lock'ать данные перед тем, как их использовать.
=== atomic operations ===
В 11х плюсах, чтобы не получались "race condition" есть atomic operations библиотека. Например, можно писать такой код:
 
atomic<int> counter(0);
 
++counter // используется одновременно в нескольких потоках
 
Эта конструкция является thread-safe, т. е. не нужно делать lock на counter.
 
=== mutexes (mutex, recuirsive_mutex, shared_mutex) ===
=== condition_variable ===
81
правка

Навигация