Уведомить с подтверждением в C ++

Как насчет определения:

def truths(L):
    """Return the elements of L that test true"""
    return [x for x in L if x]

Так, например,

> [wife.children for wife in henry8.wives]
[[Mary1], [Elizabeth1], [Edward6], [], [], []]

> truths(wife.children for wife in henry8.wives) 
[[Mary1], [Elizabeth1], [Edward6]]
1
задан newt 16 January 2019 в 15:34
поделиться

2 ответа

Вам просто нужно удерживать мьютекс, когда вы изменяете переменную _conditionReady. Это позволяет избежать состояния гонки, гарантируя, что переменная не будет изменена между проверкой ее значения и началом ожидания. Убедитесь, что вы освободили мьютекс до или после вызова notify_one, чтобы позволить вашему ожидающему потоку активизироваться (если вы сделаете это после вызова notify, вы можете ввести небольшое снижение производительности, вызвав ожидающий поток, а затем сразу же вернуться в спящий режим как мьютекс блокируется перед повторным пробуждением, когда мьютекс разблокирован). напр. :

{
  std::unique_lock <std::mutex> lock(_condLoopMutex);
  _conditionReady = true;
}
_condLoopCondition.notify_one();
0
ответ дан Alan Birtles 16 January 2019 в 15:34
поделиться

Прежде всего, сон никогда не является решением для ошибок. Он должен действительно генерировать предупреждение компилятора при каждом его использовании, которое передало бы одно и то же сообщение.

Теперь, когда вы изменяете управляющую переменную, охраняемую условием, это следует делать, удерживая мьютекс - обычно тот же, который используется в вашем cond.wait(). Ваш код этого не делает.

0
ответ дан SergeyA 16 January 2019 в 15:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: