【问题标题】:Signal to a calling thread that a resource is already in use向调用线程发出资源已在使用中的信号
【发布时间】: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


    【解决方案1】:

    您使用的是 Windows 吗?

    TryEnterCriticalSection

    [编辑:固定链接]

    【讨论】:

    • 其实,我只是用谷歌找到了 EnterCriticalSection 的确切链接,因为 'try' 变体将属于同一类别:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多