C++ 如何使用定时互斥锁?

C++ 如何使用定时互斥锁?,c++,locking,mutex,C++,Locking,Mutex,我第一次使用timed_mutex。直到现在,它只适用于我的lock_uguard 但似乎只有第一个try\u lock\u for真正成功了。除第一个外,所有的都尝试锁定返回false: #include <chrono> #include <future> #include <mutex> #include <vector> #include <iostream> std::timed_mutex mtx; long fibX(lo

我第一次使用
timed_mutex
。直到现在,它只适用于我的
lock_uguard

但似乎只有第一个
try\u lock\u for
真正成功了。除第一个
外,所有的
都尝试锁定
返回false:

#include <chrono>
#include <future>
#include <mutex>
#include <vector>
#include <iostream>
std::timed_mutex mtx;
long fibX(long n) { return n < 2L ? 1L : fibX(n-1L) + fibX(n-2L); }
long fibCall(long n) {
    using namespace std::chrono;
    if(mtx.try_lock_for(1000ms)) {    // <<< HERE
        return fibX(n);
        mtx.unlock();
    } else {
        return 0L;
    }
}
int main() {
    std::vector< std::future<long> > fs;
    for(long n=1; n<= 42; ++n) {
        fs.emplace_back( std::async(std::launch::async, fibCall, n) );
    }
    for(auto &f : fs) {
        std::cout << f.get() << "\n";
    }
}
#包括
#包括
#包括
#包括
#包括
std::timed_mutex mtx;
长fibX(长n){返回n<2L?1L:fibX(n-1L)+fibX(n-2L);}
长fibCall(长n){
使用名称空间std::chrono;
if(mtx.try_lock_for(1000ms)){/
if(mtx.try_lock_for(1000ms)){/
if(mtx.try_lock_for(1000ms)){//
if(mtx.try_lock_for(1000ms)) {    // <<< HERE
    return fibX(n);
    mtx.unlock();