Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Потоковая безопасность (презентация).pdf
Скачиваний:
20
Добавлен:
28.06.2014
Размер:
697.48 Кб
Скачать

Начало

Потоки

Использование многопоточности

Мьютексы

Библиотеки многопоточности

Блокировки

Способы обеспечения безопасности потоков

Условные переменные, барьеры

Использование библиотеки условных переменных

Пример (Boost)

#include <boost/thread/condition_variable.hpp>

using namespace boost;

Пример (C++0x)

#include <condition_variable>

using namespace std;

Лекция 8

46 / 55

Начало

Потоки

Использование многопоточности

Мьютексы

Библиотеки многопоточности

Блокировки

Способы обеспечения безопасности потоков

Условные переменные, барьеры

Методы condition_variable[_any]

Методы (владение, освобождение)

native_handle_type native_handle();

void notify_one();

void notify_all();

Лекция 8

47 / 55

Начало

Потоки

Использование многопоточности

Мьютексы

Библиотеки многопоточности

Блокировки

Способы обеспечения безопасности потоков

Условные переменные, барьеры

Методы condition_variable (окончание)

Ожидание

void wait(unique_lock <mutex> &);

template <class Predicate>

void wait(unique_lock <mutex> &, Predicate pred);

bool timed_wait(

unique_lock <mutex> &, system_time const &rcAbsTime); (Boost)

template <typename DurationType> bool timed_wait(

unique_lock <mutex> &, DurationType const &rcRelTime); (Boost)

timed_wait() с предикатом (Boost)

wait_for(), wait_until() без/с предикатом (C++0x)

Лекция 8

48 / 55

Начало

Потоки

Использование многопоточности

Мьютексы

Библиотеки многопоточности

Блокировки

Способы обеспечения безопасности потоков

Условные переменные, барьеры

Методы condition_variable_any (окончание)

Ожидание

template <class Lock> void wait(Lock &);

template <class Lock, class Predicate> void wait(Lock &, Predicate pred);

template <class Lock> bool timed_wait(

Lock &, system_time const &rcAbsTime); (Boost)

template <class Lock, typename DurationType> bool timed_wait(

Lock &, DurationType const &rcRelTime); (Boost)

timed_wait() с предикатом (Boost)

wait_for(), wait_until() без/с предикатом (C++0x)

Лекция 8

49 / 55

Начало

Потоки

Использование многопоточности

Мьютексы

Библиотеки многопоточности

Блокировки

Способы обеспечения безопасности потоков

Условные переменные, барьеры

Использование условных переменных

Пример

condition_variable g_Cond; mutex g_Mtx;

bool g_bDataReady; void process_data();

void wait_for_data_to_process()

{

unique_lock <mutex> l(g_Mtx); while (!g_bDataReady)

g_Cond.wait(l); process_data();

}

Пример (окончание)

void retrieve_and_process_data();

void prepare_data_for_processing()

{

retrieve_and_process_data();

{

lock_guard <mutex> l(g_Mtx); g_bDataReady = true;

}

g_Cond.notify_one();

}

Лекция 8

50 / 55

Начало

Потоки

Использование многопоточности

Мьютексы

Библиотеки многопоточности

Блокировки

Способы обеспечения безопасности потоков

Условные переменные, барьеры

Определение boost::barrier

Boost

// #include <boost/thread/barrier.hpp>

class barrier

{

public:

barrier(unsigned int uCount); ~barrier();

bool wait();

};

Лекция 8

51 / 55