向调用线程发信号通知资源已在使用中

时间:2009-05-17 23:30:08

标签: c++ windows multithreading concurrency

抽象的问题......
我们有一种情况,我们有一个结构可以同时由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;
    }
}

1 个答案:

答案 0 :(得分:3)

您使用的是Windows吗?

TryEnterCriticalSection

[编辑:固定链接]