c++ - 带锁的语句重新排序

标签 c++ concurrency

这里是一些从多个线程并行访问的 C++ 代码。它有一个关键部分:

lock.Acquire();
current_id = shared_id;
// small amounts of other code
shared_id = (shared_id + 1) % max_id;
lock.Release();
// do something with current_id

锁变量的类是 POSIX 互斥锁实现的包装器。由于模块操作,无法使用原子操作。

是否有可能带有 O3 标志的 gcc 编译器优化代码,以便将 current_id 的赋值移动到锁定之前?

最佳答案

可以用O3编译!

除非使用函数属性将函数标记为纯函数,否则编译器永远不会优化函数调用。

互斥函数不是纯粹的,因此将它们与 O3 一起使用是绝对安全的。

关于c++ - 带锁的语句重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2119477/

相关文章:

java - CompletableFuture#whenComplete 如果使用 thenApply 则不调用

loops - 嵌套for循环中的并发

c++ - 使用 vector 时是无符号整数还是迭代器?

c++ - For 循环中的指针

c++ EOF 运行次数过多?

c++ - 从字符串创建 vector 的程序中的段错误

c++ - 无法在 VS 2017 应用程序中使用 MFC CObject 类

java - 当不再有线程持有某个对象时,如何从 ConcurrentHashMap 中删除项目?

mysql - 如何处理并发(多个用户编辑相同数据)- VB.NET 特色 MySQL

java - 对象锁定私有(private)类(class)成员 - 最佳实践? ( java )