抽象的问题......
我们有一种情况,我们有一个结构可以同时由2个或3个线程访问
我们希望向一个尝试修改结构的线程发出信号,如果它已被修改。
e.g。目前的代码:
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 上等待。
我们需要这样做的原因是'wins'中的第一个线程,我们不希望其他线程等待当时的陈旧状态。只要调用不并发,状态就是有效的(状态在其他地方排队)。国家本身的变化不是一个长期的操作,而是具有现实世界的后果,需要很长时间(3-4s)才能发生。
编辑:
解决方案就是这样的。
int struct::modify(var SomeNewState) {
if(TryEnterCriticalSection(&criticalSection)) {
change some state...
LeaveCriticalSection(&criticalSection);
return 0;
}
else {
return 1;
}
}