2023年12月14日
摘要:
1、错误:fatal error C1021: 无效的预处理器命令“warning” 2、错误定位:\cgal\include\CGAL\internal\enable_third_party_libraries.h 3、错误原因:未包含“gmp.h”文件的include路径 4、解决方式:添加“g
阅读全文
posted @ 2023-12-14 10:58
天官赐福
阅读(759)
推荐(0)
2021年5月26日
摘要:
当涉及到共享数据时,问题很可能是因为修改共享数据所导致。如果共享数据是只读的,那么只读操作不会影响到数据,所以所有线程都会获得同样的数据。但是,当一个或多个线程要修改共享数据时,就会产生很多麻烦。 不变量:双链表中每个节点都有一个指针指向列表中下一个节点,还有一个指针指向前一个节点。其中不变量就是:
阅读全文
posted @ 2021-05-26 14:49
天官赐福
阅读(224)
推荐(0)
摘要:
第2章讨论了C++标准库中基本的线程管理方式:启动线程,等待结束和不等待结束(因为需要它们运行在后台)。并了解应该如何在线程启动前,向线程函数中传递参数,如何转移线程的所有权,如何使用线程组来分割任务。最后,讨论了使用线程标识来确定关联数据。 整章目录如下: 2 管理线程 2.1 基本线程管理 2.
阅读全文
posted @ 2021-05-26 14:05
天官赐福
阅读(39)
推荐(0)
摘要:
每个线程都有唯一的线程标识,其类型是 std::thread::id ,可以通过两种方式进行获取。第一种,可以通过调用与线程相关联的std::thread 对象的成员函数 get_id() 来直接获取。第二种,在当前线程中调std::this_thread::get_id()来获取。如果 std::
阅读全文
posted @ 2021-05-26 13:56
天官赐福
阅读(67)
推荐(0)
摘要:
下例实现了一个并行版的 std::accumulate 。代码中将整体工作拆分成小任务交给每个线程去做,其中设置最小任务数,是为了避免产生太多的线程。 template<typename Iterator, typename T> struct accumulate_block { void ope
阅读全文
posted @ 2021-05-26 11:40
天官赐福
阅读(68)
推荐(0)
2021年5月25日
摘要:
std::move转移线程的所有权 与std::ifstream 与 std::unique_ptr一样,std::thread也是可移动的,而非可复制的。这意味着一个特定的执行线程的所有权可以在std::thread实例之间移动,但是,在任意时刻,只有一个std::thread对象与某个特定的线程
阅读全文
posted @ 2021-05-25 15:06
天官赐福
阅读(151)
推荐(0)
2021年5月24日
摘要:
传递参数给线程函数 void f(int i, string s) { for (size_t per = 0; per < i; per++) { cout << per << "-" << s[per] << endl; } } int main() { std::string s = "hel
阅读全文
posted @ 2021-05-24 13:36
天官赐福
阅读(106)
推荐(0)
2021年5月18日
posted @ 2021-05-18 10:56
天官赐福
阅读(37)
推荐(0)
摘要:
分离线程 我们已经知道了,可以通过调用join()来等待线程完成;如果无需等待线程完成,可以通过分离(detaching)线程来实现,在std::thread对象上调用detach()函数,会把线程丢在后台运行,没有直接的办法与之通信。 struct func; // 前面定义很多遍了 void o
阅读全文
posted @ 2021-05-18 10:47
天官赐福
阅读(112)
推荐(0)
2021年5月17日
摘要:
如前所述,可以通过join()来等待线程完成。但是,当程序变得复杂时,程序的出口可能不止一个,如果主线程(我觉得它是,就这样吧)打算等待子线程完成,就需要仔细选择在代码的哪个位置调用join(),避免因为程序异常,跳过了对join()的调用。 struct func { int& i; func(i
阅读全文
posted @ 2021-05-17 18:32
天官赐福
阅读(74)
推荐(0)