我有一个线程1执行以下代码:
unique_lock<mutex> ul(m);
while(condition == true)
cv.wait(ul);
同时执行这段代码的第二个线程:
condition = false;
cv.notify_one();
很不幸,我遇到了一个时间问题:
T1: condition checks true
T2: condition set to false
T2: cv.notify_one()
T1: cv.wait()
线程1完全错过了通知,仍然阻塞在wait()上。我尝试使用带有谓词的wait()版本,但基本上结果相同。也就是说,谓词的主体执行检查,但在返回之前,条件的值被更改并发送了通知。然后谓词返回。
我该如何解决这个问题?