один поток, потом второй
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
int my_callback(int& val, std::recursive_mutex& m)
{
std::lock_guard<std::recursive_mutex> lock(m);
for(int i = 0; i < 10; ++i)
{
val++;
std::cout << val << '\t'
<< std::this_thread::get_id() << '\n';
}
return val;
}
int my_callback2(int& val, std::recursive_mutex& m)
{
std::lock_guard<std::recursive_mutex> lock(m);
for(int i = 0; i < 10; ++i)
{
val--;
std::cout << val << '\t'
<< std::this_thread::get_id() << '\n';
}
return val;
}
class LibClass
{
using callback = int(*)(int&, std::recursive_mutex&);
callback cbFn[2];
int idx;
public:
LibClass() : cbFn{nullptr, nullptr}, idx{}{}
void register_callback(callback cb)
{
cbFn[idx] = cb;
++idx;
}
void run(int& val, std::recursive_mutex& m)
{
std::thread t(std::ref(cbFn[0]), std::ref(val), std::ref(m));
std::thread t2(std::ref(cbFn[1]), std::ref(val), std::ref(m));
t.detach();
t2.detach();
}
};
class MyClass
{
int val;
LibClass libclass;
std::recursive_mutex m;
public:
MyClass() : val{}, libclass{}
{
libclass.register_callback(&my_callback);
libclass.register_callback(&my_callback2);
libclass.run(val, m);
}
void printVal()
{
m.lock();
std::cout << this << " val == " << val << '\n';
m.unlock();
}
};
int main()
{
MyClass m;
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Ждем
m.printVal();
}
синглтоны хороши в определенных сценариях. имхо глупо не использовать подход, который объективно хорошо себя показывает в определенных ситуациях
О конструктивном диалоге речь идет всегда, но его нельзя вести с пустотой. Конструктивный диалог нужно вести с кем-то содержательным.
Вы не допускайте, а возьмите онлайн IDE с C++17 и вуаля.
main.cpp: In function 'int main()':
main.cpp:11:7: error: request for member 'f' in 'a', which is of non-class type 'A()'
a.f();
^
typeid(a).name() == A ()
A ()clang++ prog.cc -Wall -Wextra -std=gnu++2a -pedantic
warning: empty parentheses interpreted as a function declaration
note: remove parentheses to declare a variable
error: base of member reference is a function; perhaps
you meant to call it with no arguments?
библиотек epoll
мою фунцию с другим именем, вообще из другого файла.можете показать?
multiple definition of
это значит множественное определение ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
Можно как-то обойтись без инициализирования переменной?Совсем? Наверно нет.
#include<iostream>
auto f = [](auto& is, auto&& k)
{
int n; is >> n;
while(k < n)
{
k = k * (n - k) / (k + 1);
std::cout << k << " ";
k++;k++;
}
std::cout << std::endl;
};
int main()
{
f(std::cin, 1);
}
#include<iostream>
auto f = [](auto&& n, auto&& k)
{
while(k < n)
{
k = k * (n - k) / (k + 1);
std::cout << k << " ";
k++;k++;
}
std::cout << std::endl;
};
int main()
{
f(3, 1);
}
А что у нас учиться негде? (про 6-8 недель забудьте)
profi.ifmo.ru/backend-developer