我第一次使用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}}。
可能是一些愚蠢的错误,但我看不到它......
答案 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
永远不会执行。