“C ++ Concurrency In Action”在function checkHostname(containerId, elementId) {
var textContainer = document.getElementById(elementId);
if(textContainer) {
var texte = textContainer.value;
}
}
中实现了一个可中断的线程。 Chapter 9.2 Interrupting thread
如下:
Listing 9.10
根据这本书,这个功能引入了以下问题:
如果线程在初始调用interruption_point()之后但在调用wait()之前被中断,那么条件变量是否与中断标志相关并不重要,因为线程不是等待,因此不能通过条件变量的通知唤醒。 您需要确保在最后一次中断检查和wait()调用之间无法通知线程。
第一个问题是我们void interruptible_wait(std::condition_variable& cv,
std::unique_lock<std::mutex>& lk)
{
interruption_point();
this_thread_interrupt_flag.set_condition_variable(cv);
cv.wait(lk);
this_thread_interrupt_flag.clear_condition_variable();
interruption_point();
}
的原因? &#39;导致此功能似乎正常运行need to ensure that
。谁能告诉我这个功能将如何向南?是因为在这种情况下永远不会通知cv.wait(lk)吗?
第二个问题是the thread is interrupted after the initial call to interruption_point() and before the call to wait()
解决此问题的方式,本书仅通过Listing 9.11
替换cv.wait()
来提及:
cv.wait_for()
答案 0 :(得分:2)
如果另一个线程在此线程到达notify()
之前调用wait()
,则该线程将无法接收该通知,并将永远等待另一个线程。
wait_for
不会永远等待。