/
ArtT
/
Netology
Обзор
Документация
Войти
/
ArtT
/
Netology
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Part5/Task_5_2_3/Task_5_2_3.cpp
59 строк
2 KB
ArtT
Исправлено задание 5_2_3
30 май 2026, 16:07
30 май 2026, 16:07
bd5f5b3
Код
Авторство
О чём код?
#include <iostream> #include <mutex> #include <thread> #include <vector> using namespace std; class Data { public: int Value; mutex mtx; Data(int aValue) : Value(aValue) {} }; void swap_lock(Data& d1, Data& d2) { lock(d1.mtx, d2.mtx); lock_guard<std::mutex> lgD1(d1.mtx, adopt_lock); lock_guard<std::mutex> lgD2(d2.mtx, adopt_lock); cout << "swap_lock" << "\n"; cout << " До: d1=" << d1.Value << " d2=" << d2.Value << endl; swap(d1.Value, d2.Value); cout << " После: d1=" << d1.Value << " d2=" << d2.Value << endl << endl; } void swap_scoped_lock(Data& d1, Data& d2) { scoped_lock lock(d1.mtx, d2.mtx); cout << "swap_scoped_lock" << "\n"; cout << " До: d1=" << d1.Value << " d2=" << d2.Value << endl; swap(d1.Value, d2.Value); cout << " После: d1=" << d1.Value << " d2=" << d2.Value << endl << endl; } void swap_unique_lock(Data& d1, Data& d2) { unique_lock<mutex> ulD1(d1.mtx, defer_lock); unique_lock<mutex> ulD2(d2.mtx, defer_lock); std::lock(ulD1, ulD2); cout << "swap_unique_lock" << "\n"; cout << " До: d1=" << d1.Value << " d2=" << d2.Value << endl; swap(d1.Value, d2.Value); cout << " После: d1=" << d1.Value << " d2=" << d2.Value << endl << endl; } int main() { setlocale(LC_ALL, "rus"); Data d1(25), d2(17); vector<thread> TV; TV.push_back(thread(swap_lock, ref(d1), ref(d2))); TV.push_back(thread(swap_scoped_lock, ref(d1), ref(d2))); TV.push_back(thread(swap_unique_lock, ref(d1), ref(d2))); for (auto& t : TV) t.join(); return EXIT_SUCCESS; }