added exercise 1

This commit is contained in:
Alexander Zhirov 2021-10-10 23:46:11 +03:00
parent fe8ca99a6b
commit 088984b93b
2 changed files with 67 additions and 0 deletions

53
lesson_6/exercise_1.hpp Normal file
View File

@ -0,0 +1,53 @@
/*
* exercise_1.hpp
*
* Created on: 10 окт. 2021 г.
* Author: alexander
*/
#pragma once
#include <iostream>
#include <thread>
#include <mutex>
static std::mutex mtx_cout;
class pcout
{
private:
std::lock_guard<std::mutex> lk;
public:
pcout() : lk(std::lock_guard<std::mutex>(mtx_cout))
{
}
template<typename T>
pcout& operator<<(const T &data)
{
std::cout << data;
return *this;
}
pcout& operator<<(std::ostream& (*fp)(std::ostream&)) // т.к. std::endl является функцией,
{ // то для неё делаем перегрузку operator<<
std::cout << fp; // которая принимает указатель на функцию
return *this; // типа std::ostream& и возвращает наш
} // защищённый поток вывода
};
void doSomething(int number)
{
pcout() << "start thread " << number << std::endl;
pcout() << "stop thread " << number << std::endl;
}
void exercise_1()
{
std::thread th1(doSomething, 1);
std::thread th2(doSomething, 2);
std::thread th3(doSomething, 3);
th1.join();
th2.join();
th3.join();
}

14
lesson_6/main.cpp Normal file
View File

@ -0,0 +1,14 @@
/*
* main.cpp
*
* Created on: 10 окт. 2021 г.
* Author: alexander
*/
#include "exercise_1.hpp"
int main()
{
exercise_1();
return 0;
}