Есть такой пример использования condition_variable:
std::mutex m;
std::condition_variable v;
bool b;
void thfunc() {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
cout << "signal st" << endl;
{
std::unique_lock<std::mutex> locker(m);
b = false;
v.notify_one();
}
}
void Run() {
b = true;
std::thread th(thfunc);
th.detach();
//std::this_thread::sleep_for(std::chrono::milliseconds(100));
{
std::unique_lock<std::mutex> ulock(m);
while (b)
v.wait(ulock);
}
cout << "signal recv" << endl;
cout << "signal recv" << endl;
}
1) Если поставить guard_lock
он не компилится. Зачем вариабле лок? notify_one()
живёт же без лока.
2) Если обернуть m.lock()
сверху то вроде работает. Но может мне повезло?
3) Поток ожидания должен был вызвать лок при создании ulock
и не дать зайти к v.notify_one();
и остановить его навечно. Но пример работает.
4) Для того, чтобы этот пример работал нужно 4 переменных m, v, b, ulock
почему std не объединило их в одну?
Соответственно почему же выходят такие результаты?
Сделать пытаюсь простую вещь: поток 1 засыпает и ждёт пока поток 2 его не просигналит проснутся. Сигнал проснуться может быть послан как до того как поток уснул, так и после/во время. Может для этого есть особый вариант в std?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Учу С++ самостоятельно, вот решил написать программу, которая определяет, есть ли повторяющиеся цифры в числеЧтобы усложнить себе жизнь, добавил...
Есть пример который компилируется
у меня все работает хорошо, но в arr[0] где то присваивается 0Поэтому я пишу в PrintArray int i = 1