void some_internal_function()
{
std::unique_lock<std::mutex> l(mutex);
if (task_status == deferred)
{
task_status=in_progress;
l.unlock();
execute_task();
l.lock();
task_status=ready;
l.unlock();
cv.notify_all();
}
}
void execute_task()
{
//perform blocking I/O or other user-provided task
}
Гарантируется ли вызов execute_task()
_не_ под блокировкой? Ведь ничто не мешает компилятору перенести этот вызов на строку выше или ниже. Реальный компилятор врядли так сделает, а вот стандарт такие преобразования не запрещает(???)