标签: synchronization

C++线程,共享数据

我有一个应用程序,其中2个线程正在运行...当我从一个线程更改一个全局变量时,是否有任何证据,另一个会注意到这个变化?我没有任何同步或互斥系统......但是这段代码应该一直工作(想象一下名为dataUpdated的全局bool):

线程1:

while(1) {
    if (dataUpdated)
        updateScreen();
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

线程2:

while(1) {
    if (doSomething())
        dataUpdated = TRUE;
}
Run Code Online (Sandbox Code Playgroud)

像gcc这样的编译器是否以不检查全局值的方式优化此代码,只在编译时考虑它的值(因为它会在同一个thred中更改)?

PS:对于类似游戏的应用程序而言,在写入值时是否会有读取真的无关紧要......重要的是这个更改会被其他线程注意到.

c++ multithreading synchronization mutex

28
推荐指数
4
解决办法
3万
查看次数

如何在Android手机上将SQLite数据库与服务器上的MySQL数据库同步?

我正在开发一个Android应用程序.我想用服务器上的MySQL数据库更新本地SQLite数据库.我无法弄清楚最合适和最标准化的方法是什么?

mysql database android synchronization

28
推荐指数
2
解决办法
6万
查看次数

在重入锁定的条件下等待

以下代码取自JavaDocCondition:

class BoundedBuffer {
  final Lock lock = new ReentrantLock();
  final Condition notFull  = lock.newCondition(); 
  final Condition notEmpty = lock.newCondition(); 

  final Object[] items = new Object[100];
  int putptr, takeptr, count;

  public void put(Object x) throws InterruptedException {
    lock.lock();
    try {
      while (count == items.length) 
        notFull.await();
      items[putptr] = x; 
      if (++putptr == items.length) putptr = 0;
      ++count;
      notEmpty.signal();
    } finally {
      lock.unlock();
    }
  }

  public Object take() throws InterruptedException {
    lock.lock();
    try {
      while (count == 0) 
        notEmpty.await(); …
Run Code Online (Sandbox Code Playgroud)

java synchronization

28
推荐指数
2
解决办法
3万
查看次数

我什么时候需要使用MPI_Barrier()?

我想知道什么时候需要使用屏障?例如,在分散/聚集之前/之后我需要它吗?或者OMPI应该确保在分散/收集之前所有进程都已达到这一点?同样,在广播之后我可以期望所有进程都已收到消息吗?

synchronization mpi openmpi

28
推荐指数
2
解决办法
3万
查看次数

原子操作和多线程

最近我正在阅读一个教程,因为我发现了一个声明说...

"Java语言规范保证读取或写入变量是一个原子操作(除非变量是类型long或者double).类型的操作变量longdouble只有在用volatile关键字声明时才是原子的."

AtomicIntegerAtomicLong提供类似的方法getAndDecrement(),getAndIncrement()以及getAndSet()哪些是原子方法.

我对上述陈述感到困惑.你能澄清何时使用 AtomicIntegerAtomicLong上课.

java variables multithreading synchronization atomicity

28
推荐指数
2
解决办法
3万
查看次数

如何在android中以编程方式添加自定义帐户?

我正在尝试为我的应用创建一个帐户,在那里我可以将我的联系人设置为我的帐户,例如facebook,viber,WhatsApp等.我希望我的帐户也可以在设置的帐户部分中显示.有任何想法吗?我搜索了很多,但找不到正确的答案从哪里开始.请帮忙.我试图创建一个帐户的内容如下.这导致我出错.

Account account = new Account("Title", "com.package.nom");
               String password = "password";

               AccountManager accountManager =
                       (AccountManager) MainPanel.this.getSystemService(
                               ACCOUNT_SERVICE);
               accountManager.addAccountExplicitly(account, password, null);
Run Code Online (Sandbox Code Playgroud)

java account android synchronization

28
推荐指数
2
解决办法
2万
查看次数

在C++ 11中等待多个条件变量的最佳方法是什么?

首先是一个小小的上下文:我正在学习C++ 11中的线程,为此目的,我正在尝试构建一个actor小类,基本上(我将异常处理和传播内容留下),如下所示:

class actor {
    private: std::atomic<bool> stop;
    private: std::condition_variable interrupt;
    private: std::thread actor_thread;
    private: message_queue incoming_msgs;

    public: actor() 
    : stop(false), 
      actor_thread([&]{ run_actor(); })
    {}

    public: virtual ~actor() {
        // if the actor is destroyed, we must ensure the thread dies too
        stop = true;
        // to this end, we have to interrupt the actor thread which is most probably
        // waiting on the incoming_msgs queue:
        interrupt.notify_all();
        actor_thread.join();
    }

    private: virtual void run_actor() {
        try { …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading synchronization condition-variable c++11

28
推荐指数
1
解决办法
2万
查看次数

在多个Python多处理队列上"选择"?

在两个(多处理)队列中的任何一个队列中存在某些东西(两者都驻留在同一系统上)之前,等待(不旋转)的最佳方法是什么?

python events select synchronization multiprocessing

27
推荐指数
2
解决办法
2万
查看次数

同步两个相关对象列表的标准算法是什么?

我很确定这必须在某种教科书中(或者更有可能在所有这些教科书中)但我似乎使用了错误的关键词来搜索它...... :(

我在编程时遇到的一个反复出现的任务是我正在处理来自不同来源的对象列表,我需要以某种方式保持同步.通常有一些"主列表",例如由一些外部API返回,然后是我自己创建的对象列表,每个对象都与主列表中的对象相对应(想想"包装"或"适配器" - 它们通常包含扩展信息关于特定于我的应用程序的外部对象和/或它们简化了对外部对象的访问.

所有问题实例的硬特征:

  • 主列表的实现对我来说是隐藏的; 它的界面是固定的
  • 两个列表中的元素不是赋值兼容的
  • 我完全可以控制从属列表的实现
  • 我无法控制主列表中元素的顺序(即它不可排序)
  • 主列表要么根本不提供有关添加或删除元素的通知,要么通知不可靠,即同步只能按需发生,而不是直播
  • 只需在需要时从头开始清除和重建从属列表不是一个选项:
    • 初始化包装器对象应该被认为是昂贵的
    • 其他对象将保存对包装器的引用

在某些情况下的其他特征:

  • 主列表中的元素只能通过读取其属性来识别,而不是通过索引或内存地址直接访问它们:
    • 刷新后,主列表可能会返回一组全新的实例,即使它们仍然代表相同的信息
    • 访问主列表中元素的唯一接口可能是顺序枚举器
  • 大多数情况下,主列表中元素的顺序是稳定的,即新元素总是在开头或结尾添加,而不是在中间; 但是,删除通常可以在任何位置进行

那么我通常如何解决这个问题呢?我应该google算法的名称是什么?

在过去,我已经以各种方式实现了这一点(参见下面的示例),但总觉得应该有更清洁,更有效的方式,尤其是不需要两次迭代的方法(每个列表一个).

这是一个示例方法:

  1. 迭代主列表
  2. 查找"从属列表"中的每个项目
  3. 添加尚不存在的项目
  4. 以某种方式跟踪两个列表中已存在的项目(例如,通过标记它们或保留另一个列表)
  5. 完成后,迭代从属列表并删除所有未标记的对象(请参阅4.)并再次清除所有其他对象

更新1 感谢您的所有回复!我需要一些时间来查看链接.
[...] (文字移至问题主体)

更新2 将中间段重构为(希望)更易于解析的项目符号列表,并在第一次更新中添加后续添加的详细信息.

language-agnostic algorithm synchronization list

27
推荐指数
3
解决办法
7583
查看次数

什么是Cassandra中Paxos和W + R> = N之间的区别?

类似Dynamo的数据库(例如Cassandra)可以通过仲裁来强制执行一致性,即一些同步写入的副本(W)和一些要读取的副本(R)应该以W + R> N的方式选择N是复制因子.另一方面,像Zookeeper这样的基于PAXOS的系统也被用作一致的容错存储.

这两种方法有什么区别?PAXOS是否提供W + R> N架构未提供的保证?

algorithm synchronization cassandra paxos apache-zookeeper

27
推荐指数
4
解决办法
7684
查看次数