摘要:
背包问题学习记录,参考dd大牛的背包九讲:https://www.cnblogs.com/jbelial/articles/2116074.html 阅读全文
摘要:
cmake的基本使用以及cmake和vscode中launch.json,tasks.json的组合拳 阅读全文
摘要:
等待一个事件 在多线程开发中,当一个线程的运行条件是另外一个线程的运算结果的时间,等待线程通常有几种处理方法1. 循环查询,知道满足条件为止 2. 休眠一个固定的时间,然后查询条件,当不满足的时候再继续休眠相同时间,知道下一次查询满足条件 3. 使用条件变量 下面分别对后两种方法进行阐述 休眠固定时 阅读全文
摘要:
保护共享数据的替代措施 互斥量是保护数据的一种通用错失,但并不是唯一错失,这里有很多的替代方法可以在一些特定的情况下,提供更加合适的保护 共享数据初始化过程的保护 假设对于一个共享源,构造的代价非常昂贵,在单线程中,通常采用延迟初始化的方法例子如下; shard_ptr<resource> reso 阅读全文
摘要:
使用互斥量保护共享数据 C++中使用互斥量 C++通过实例化std::mutex创建互斥量,通过调用成员函数lock()进行加锁,unlock()进行解锁,在实践中不推荐直接调用成员函数,因为调用成员函数就意味着,必须记住在每个函数的出口都需要调用unlock(),同时包括异常的情况,C++中推荐使 阅读全文
摘要:
识别线程 线程表示类型为std::id可以通过两种方式进行检索 第一种可以通过std::thread 的对象成员函数get_id()来直接获取 第二种是在当前线程中调用std::get_id() void func(){ cout<<"print id in son process"<<std::t 阅读全文
摘要:
转移线程的所有权 C++中有很多资源占用类型,例如std::ifstream,std::unique_ptr,std::thread都是可以移动,但是不能拷贝的 void func1(); void func2(); std::thread t1(func1); std::thread t2 = s 阅读全文
摘要:
向线程函数传递参数 参数传递的基本形式如下所示: void f(int , std::string const & s); std::thread(f,3,"hello") std::thread 对传入的参数默认行为是复制,即使函数的形参是引用: void update_data_widget(w 阅读全文