我假设您在这里至少有 2 个内核可以使用。否则,多线程不会对您有太大帮助,如果有的话。我在这里使用 C++11 多线程语义,因此您将在编译器中启用 C++11 语言规范:
#include <condition_variable>
#include <thread>
#include <mutex>
using namespace std;
condition_variable cv;
mutex mtx;
bool ready = false;
void update_vars() {
while( true ) {
// Get a unique lock on the mutex
unique_lock<mutex> lck(mtx);
// Wait on the condition variable
while( !ready ) cv.await( mtx );
// When we get here, the condition variable has been triggered and we hold the mutex
// Do non-threadsafe stuff
ready = false;
// Do threadsafe stuff
}
}
void do_stuff() {
while( true ) {
// Do stuff on vars
if ( f(vars) ) {
// Lock the mutex associated with the condition variable
unique_lock<mutex> lck(mtx);
// Let the other thread know we're ready for it
ready = true;
// and signal the condition variable
cv.signal_all();
}
while( ready ) {
// Active wait while update_vars does non-threadsafe stuff
}
}
}
int main() {
thread t( update_vars );
do_stuff()
}
上面的代码片段所做的是创建一个运行 update vars 的辅助线程,它将挂起并等待,直到主线程(运行 do_stuff)通过条件变量向它发出信号。
PS,您可能也可以对期货进行此操作,但我尚未与那些足以根据这些回答的人合作。