我如何使用timed_mutex?

时间:2017-03-06 21:32:40

标签: c++ locking mutex

我第一次使用try_lock_for工作。到目前为止,我只有try_lock_for

但似乎只有第一个#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"; } } 实际上成功了。除第一个1, 0, 0, 0, 0, ...之外的所有内容都返回false:

1, 2, 3, 5, 8, 13, ... 0, 0, 0, 0, 0

我得到了结果0

但是,当第一次通话时间超过一秒时,我希望从{{1}}开始{{1}}。

可能是一些愚蠢的错误,但我看不到它......

1 个答案:

答案 0 :(得分:4)

    if(isset($_POST['rejectCEO']) && $_POST['reasonCEO'] != ""){
        $selectedReason = implode(', ',$_POST['projectInfo']);

        $query3="UPDATE projects 
        SET project_status = '3', reason = '".$_POST['reasonCEO']."', reason_referrer = '".implode(',',$_POST['projectInfo'])."'
        WHERE id =".$idProj."";      

        retrieveTable($query3);
        header('Location: listprojectsprojectproposal.php');
}

if(mtx.try_lock_for(1000ms)) { // <<< HERE return fibX(n); mtx.unlock(); 以后,unlock永远不会执行。