如何在x86 / 64上测试基于无锁/原子的代码中的内存顺序问题?

时间:2018-03-22 22:18:23

标签: c++ testing concurrency lock-free memory-barriers

在尝试使用带有原子的内存顺序标签的教科书示例时,我意识到即使使用function onSubmit(e) { //get entry id var entryId = e.response.getId(); //get form ID var formId = e.source.getId(); var soloResponse = "https://docs.google.com/forms/d/" + formId + "/viewform?edit2=" + entryId; //build email from form data var email = "test"; var subject = "test"; var body = soloResponse; //send email GmailApp.sendEmail(email, subject, body); } ,下面的示例也会像使用更强的内存顺序标签一样工作。在谷歌搜索我发现它,因为x86已经保证了一个相对强烈有序的内存模型。我的问题是当在x86上编写基于原子的并发代码时,我怎么知道我写的代码是否“安全”,即使我搞砸了内存顺序标签它仍能正常工作?

by“safe”我的意思是在没有x86自动强记忆排序的情况下按预期工作。

std::memory_order_relaxed

在x86上,断言永远不会触发,上面的代码就好像存储到y和y的加载使用了释放/获取语义。

0 个答案:

没有答案