【发布时间】:2009-05-17 23:30:08
【问题描述】:
问题在摘要中略...
我们有一种情况,我们有一个可以被 2 或 3 个线程同时访问的结构。
如果结构已被修改,我们希望向尝试修改结构的线程发出信号。
例如目前的代码:
thread0: struct->modify(var SomeNewState)
thread1: struct->modify(var SomeNewState)
thread2: struct->modify(var SomeNewState)
void struct::modify(var SomeNewState) {
EnterCriticalSection(&criticalSection);
change some state...
LeaveCriticalSection(&criticalSection);
}
我们想做的是让struct::modify() 立即返回以指示是否正在使用criticalSection。也就是说,我们不希望其他线程等待这个criticalSection。
我们需要这样做的原因是“获胜”中的第一个线程,我们不希望其他线程等待陈旧状态。只要调用不是并发的,状态就有效(状态在其他地方排队)。状态改变本身不是一个长时间的操作,但会产生实际后果,需要很长时间(3-4 秒)才能发生。
编辑:
解决方案是这样的。
int struct::modify(var SomeNewState) {
if(TryEnterCriticalSection(&criticalSection)) {
change some state...
LeaveCriticalSection(&criticalSection);
return 0;
}
else {
return 1;
}
}
【问题讨论】:
标签: c++ windows multithreading concurrency