c – 如何避免线程优化器==无限循环?
发布时间:2020-12-16 10:18:06 所属栏目:百科 来源:网络整理
导读:在今天的 code review中,我偶然发现了以下一些代码(稍微修改后发布): while (!initialized){ // The thread can start before the constructor has finished initializing the object. // Can lead to strange behavior. continue;} 这是在新线程中运行的前
在今天的
code review中,我偶然发现了以下一些代码(稍微修改后发布):
while (!initialized) { // The thread can start before the constructor has finished initializing the object. // Can lead to strange behavior. continue; } 这是在新线程中运行的前几行代码.在另一个线程中,一旦初始化完成,它将initialized设置为true. 我知道优化器可以将其变成无限循环,但是避免这种情况的最佳方法是什么? >挥发性 – considered harmful 还有其他选择吗? 编辑: 应该早点提到这个,但这是需要在Windows,Linux,Solaris等上运行的可移植代码.我们主要使用Boost.Thread作为我们的便携式线程库. 解决方法
调用一个函数根本没有用;即使一个函数没有内联声明,它的主体仍然可以内联(除非是极端的东西,比如将你的isInitialized()函数放在另一个库中并动态链接它).
想到两个选项: >声明初始化为原子标志(在C 0x中,您可以使用std :: atomic_flag;否则,您将需要查阅线程库的文档以了解如何执行此操作)>使用信号量;在另一个线程中获取它并在此线程中等待它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |