c++标准库提供条件变量以及期值等工具来等待事件以及简化操作的同步。
std::this_thread::sleep_for(std::chrono::milliseconds(100)); //当前线程休眠100毫秒
使用std::condition_variable条件变量等待数据
int data_num = 10;
std::queue<int> data;
std::mutex my_mutex;
std::condition_variable data_cond;
void preparation_data() {
while (data_num) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::lock_guard<std::mutex> my_lock(my_mutex);
data.push(data_num--);
data_cond.notify_one(); //另可使用.notify_all()通知所有执行wait()的线程检查其等待中的条件
}
}
void processing_data() {
while (true) {
std::unique_lock<std::mutex> my_lock(my_mutex);
data_cond.wait(my_lock, [] {return !data.empty();});
std::cout << data.front() << std::endl;
data.pop();
my_lock.unlock();
if (!data_num) { //此处使用其实