我想将一些代码从Java移植到C++ 11,我对volatile关键字有点困惑。 我不熟悉Java语言,也不了解volatile变量是什么。它保证每个线程都可以访问变量的最新值-这是C++的 Volatile 行为。但是它通常用于同步-是否对易失变量原子执行所有操作? 因此,我认为Java volatile的C++ 11良好替代品将是std::atomic。还是我完全错了,因为我错过了一些其他的Java volatile功能? 解决方案如下: 是的,它们将是一个很好的匹配,在Dr Dobbs上有一篇很好的文章。 I…

2020年11月13日 0条评论 58点热度 阅读全文

Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注 editing this post的一个问题。 4年前关闭。 Improve this question 我对多线程增量的最佳性能进行了调查。我检查了基于同步,AtomicInteger和自定义实现(例如在AtomicInteger中)的实现,但对失败的CAS使用了parkNanos(1)。 private int customAtomic() { int ret…

2020年11月12日 0条评论 43点热度 阅读全文

我试图了解原子操作如何工作,尤其是在Java中。 采取AtomicInteger。该文件说:“一个可以自动更新的int值。”例如,此类的原子操作之一是: /** * Atomically sets to the given value and returns the old value. * * @param newValue the new value * @return the previous value */ public final int getAndSet(int newValue) { return…

2020年9月29日 0条评论 40点热度 阅读全文

如何将非数据库操作封装到事务中? 例如,假设我有一些顺序调用的方法/函数,一些更新数据库,文件系统上的一些更新文件,HttpSession中的一些更新参数,一些更新高速缓存等。如果其中一个失败,像更新 session 一样,如何回滚文件系统,数据库等中的所有其他更改? 环境是像Tomcat这样的Java Servlet容器,其中包括Struts2,任何RDBMS,持久层(例如Hibernate或Ibatis)等。 解决方案如下: 所有这些都必须是事务性资源,能够参与两阶段提交协议(protocol),以便执行您想要…

2020年9月1日 0条评论 48点热度 阅读全文

假设我想把这棵树写给动物园管理员 . a . / \ . b c . / \ . d e 在创建节点b之后,但在能够写入节点d或e之前,其他一些客户端可能会出现并删除节点b。 有没有办法我可以自动编写此层次结构,或者可以锁定某个路径? 解决方案如下: 您可以使用新的multi() API 它完成所有操作或中止所有操作。

2020年8月25日 0条评论 60点热度 阅读全文

我正在使用Java库的C++端口。问题之一是我找不到Java的AtomicLongArray。有人知道c++ 11中是否已经有等效的东西,或者如何实现类似的功能?我看了C++ 11原子,但是什么也找不到。 解决方案如下: AtomicLongArray的文档说: A long array in which elements may be updated atomically. See the java.util.concurrent.atomic package specification for descript…

2020年8月4日 0条评论 68点热度 阅读全文

我知道i++等复合操作不是线程安全的,因为它们涉及多个操作。 但是,使用引用本身检查线程安全吗? a != a //is this thread-safe 我尝试对此进行编程,并使用多个线程,但没有失败。我想我无法在机器上模拟种族。 编辑: public class TestThreadSafety { private Object a = new Object(); public static void main(String[] args) { final TestThreadSafety instance =…

2020年7月20日 0条评论 47点热度 阅读全文

我需要执行选择,然后以原子方式更新ResultSet中的某些行。 我正在使用的代码如下所示(简化): stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery("SELECT ..."); while (rs.next()) { if (conditions_to_update) { rs.updateString(...); rs.updateRow…

2020年6月10日 0条评论 42点热度 阅读全文

This question already has answers here: Volatile boolean vs AtomicBoolean (11个答案) 去年关闭。 我已经看过SO中的其他volatile与Atomicxxxx问题(包括 this one),并阅读了 the description of java.util.current.atomic,我对细微差别并不满意。 如果我要决定使用 volatile boolean和 AtomicBoolean之间的区别,除了AtomicBoolean提供的原…

2020年5月4日 0条评论 98点热度 阅读全文

在OCP Java SE 6程序员实践考试的第291页中,问题25: public class Stone implements Runnable { static int id = 1; public void run() { id = 1 - id; if (id == 0) pick(); else release(); } private static synchronized void pick() { System.out.print("P "); System.out.print("Q "); } p…

2020年4月25日 0条评论 53点热度 阅读全文