标签: synchronize

同步三个ajax请求

我有三个AJAX请求一个接一个地触发,我希望能够同时回显所有数据.

$.ajax ({
        type: "POST",
        url: "page1.php",
        data: "var1=" + var1,
        success: function(msg) {
            $("#results2").load("page2.php", 
            function (responseText, textStatus, XMLHttpRequest) {
                $("#results3").load("page3.php",
                function (responseText, textStatus, XMLHttpRequest) {
                    if (textStatus == "success") {
                        $("#results1").html(msg);
                    }
                });
          });
        }
    });
Run Code Online (Sandbox Code Playgroud)

#results1,#results2并且#results3所有人都需要同时加载他们的相关数据.上面的代码没有这样做.

ajax jquery synchronize

7
推荐指数
1
解决办法
4173
查看次数

了解TCriticalSection和Synchronize

我想在这里证实,如果我理解正确的是如何TCriticalSectionSynchronize操作.

据我所知,现在Synchronize使用SendMessage(更新:或者至少在下面几条评论中提到的较旧的VCL版本中使用它),它暂停当前正在执行的线程(以及任何其他线程),不像那样PostMessage,然后执行所需功能(来自主线程).在SendMessage执行时"停止"多线程.

但我不确定TCriticalSection.比方说我创建这样的东西:

// Global variables somewhere in my code any thread can access
boost::scoped_ptr<TCriticalSection> ProtectMyVarAndCallFnction(new TCriticalSection);
int MyVariable1;
void CallMyFunctionThatAlsoModifiesMoreStuff() { /* do even more here */ };


// Thread code within one of the threads
try {
    ProtectMyVarAndCallFnction->Acquire();
    MyVariable1++;
    CallMyFunctionThatAlsoModifiesMoreStuff();
    }
__finally {
    ProtectMyVarAndCallFnction->Release();
    }
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是 - 关键部分如何"知道"我在这种情况下保护MyVariable1以及被调用的函数可以修改什么?

如果我理解正确 - 它没有 - 并且我有责任在任何线程中正确调用Acquire()想要更改MyVariable1或调用此函数(或执行任何两个).换句话说,我认为TCriticalSection是用户定义的块,它定义了我分配给它的逻辑.它可以是一组变量或任何特定函数,只要我在可能写入此块或使用此函数的所有线程中调用Acquire().例如,"DiskOp"可能是我TCriticalSection在磁盘上写入的名称,"Internet"可能是TCriticalSection调用从Internet检索某些数据的函数的名称.我弄错了吗?

此外,在这种情况下,TCriticalSection是否总是需要成为一种全局变量?

delphi multithreading c++builder critical-section synchronize

7
推荐指数
1
解决办法
3234
查看次数

在两台服务器之间同步缓存数据的最佳方法

想要在两个服务器之间同步缓存数据.两个数据库共享同一个数据库,但为了更好的执行数据,我在启动时将数据缓存到Hash Map中.因此,希望在不重新启动服务器的情况下同步缓存的数据.(两台服务器同时启动).

请建议我最好和最有效的方法.

java caching synchronize

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

在python中同步多个线程

我有一个问题,我需要x线程等到它们都达到同步点.我的解决方案使用synchronise下面的方法,当需要同步时,每个线程函数调用该方法.

有一个更好的方法吗?

thread_count = 0
semaphore = threading.Semaphore()
event = threading.Event()

def synchronise(count):
    """ All calls to this method will block until the last (count) call is made """
    with semaphore:
        thread_count += 1
        if thread_count == count:
            event.set()

    event.wait()

def threaded_function():
    # Do something

    # Block until 4 threads have reached this point
    synchronise(4)

    # Continue doing something else
Run Code Online (Sandbox Code Playgroud)

python multithreading synchronize

6
推荐指数
1
解决办法
5406
查看次数

Synchronize()挂起线程

我在Delphi中编写了一个dll库,它创建了多个线程.让我一步一步地描述问题.我很抱歉提前做了很长时间的描述:-(.

让我们暂时忘掉图书馆.我创建了一个Windows应用程序,它将从几个摄像头呈现视图.我创建了一个窗口,用于显示来自单个摄像头的视图,它包含一个TImage控件.有一个线程(一个TThread后代)每隔几毫秒从摄像头下载当前图像,并将其分配给该窗口的TImage控件(使用Synchronize()方法).应用程序在启动时创建该窗口的多个实例(每个窗口都有一个单独的线程),因此您可以同时从多个摄像头中查看实时视图.更重要的是,所有这些查看窗口都是主应用程序窗口的父级,因此它们出现在其中.

一切正常,直到我决定将这两个窗口放入dll库.我发现有必要出于某些原因,但现在它们并不重要.所以我创建了一个新的dll库,将现有的主窗口和摄像机视图窗口添加到项目中,并导出了一个创建并返回主窗口实例的函数.创建主窗口时,它会创建几个摄像机视图窗口,使其自身成为父窗口.

然后,出于测试目的,我创建了一个应用程序,它从库中导入上面提到的dll函数,并在启动时调用它来获取主窗口的实例; 然后只是在屏幕上显示它(处于非模态状态).

当我启动应用程序时,我发现我无法从任何相机获得单个图像.当我调试它时,我注意到当线程调用Synchronize()方法时,它会永远挂起.在将这两个窗口放入dll之前没有发生过.

这是我的问题.说实话,这是我对图书馆的第一种方法,到目前为止,我必须解决许多其他问题.您可能想知道为什么我使用Windows而不是框架......所以每当我在dll中创建一个TFrame实例时,我会得到一个例外,说"控件xxx没有父窗口".我不知道该怎么办,所以我改用了windows :-(.

你能告诉我如何处理同步问题吗?当应用程序启动时,主线程似乎没有以任何方式被阻止它接受点击按钮等.那么问题是什么?

请帮忙!

先感谢您!!

delphi dll multithreading synchronize

6
推荐指数
1
解决办法
2965
查看次数

PHP线程和同步

我是PHP的新手,所以要开始我已经决定实现一个单例.

虽然我能够在php中重新创建单例模式,但我不确定如何实现双重检查锁定.

这在PHP中是否可行/需要.我在某处读过PHP不是多线程的?有人可以证实吗?

如果它是多线程的,有人可以向我解释一下lock()或synchronize()在PHP中是如何工作的吗?

谢谢,亨利

php singleton multithreading synchronize double-checked-locking

6
推荐指数
1
解决办法
5865
查看次数

java.lang.IllegalMonitorStateException:对象在wait()之前未被线程锁定

但我正在同步"名册"对象,无论它到处都是新的.怎么会 ?

违规代码:

 public Roster getRoster() {
    if (roster == null) {
        return null;
    }

    if (!roster.rosterInitialized) {
        try {
            synchronized (roster) {
                roster.reload();
                long waitTime = SmackConfiguration.getPacketReplyTimeout();
                long start = System.currentTimeMillis();
                while (!roster.rosterInitialized) {
                    if (waitTime <= 0) {
                        break;
                    }
                    roster.wait(waitTime);
                    long now = System.currentTimeMillis();
                    waitTime -= now - start;
                    start = now;
                }
            }
        }
        catch (InterruptedException ie) {
            // Ignore.
        }
    }
    return roster;
}
Run Code Online (Sandbox Code Playgroud)

java android synchronize locks

6
推荐指数
1
解决办法
3万
查看次数

线程池,共享数据,Java同步

说,我有一个数据对象:

class ValueRef { double value; }

每个数据对象存储在主集合中的位置:

Collection<ValueRef> masterList = ...;

我还有一组作业,其中每个作业都有一个本地的数据对象集合(每个数据对象也出现在其中masterList):

class Job implements Runnable { 
     Collection<ValueRef> neededValues = ...; 
     void run() {
         double sum = 0;
         for (ValueRef x: neededValues) sum += x;
         System.out.println(sum);
     } 
}
Run Code Online (Sandbox Code Playgroud)

用例:

  1. for (ValueRef x: masterList) { x.value = Math.random(); }

  2. 使用某些作业填充作业队列.

  3. 唤醒线程池

  4. 等到每个工作都被评估

注意:在作业评估期间,所有值都是常量.但是,线程可能已经评估过去的作业,并保留缓存的值.

问题: 确保每个线程看到最新值所需的最小同步量是多少?

我理解从monitor/lock-perspective进行同步,我不理解从cache/flush-perspective进行同步(即,在同步块的进入/退出时内存模型保证了什么).

对我来说,感觉我需要在更新值的线程中同步一次以将新值提交到主内存,并且每个工作线程一次,以刷新缓存以便读取新值.但我不确定如何最好地做到这一点.

我的方法:创建一个全局监视器:static Object guard = new Object(); 然后,同步guard,同时更新主列表.最后,在启动线程池之前,对池中的每个线程执行一次,guard在空块中进行同步.

这真的会导致该线程读取的任何值的完全刷新吗?或者只是在同步块内触及的值?在这种情况下,可能我应该在循环中读取每个值一次,而不是空块?

谢谢你的时间.


编辑:我认为我的问题可归结为,一旦我退出同步块,每次第一次读取(在该点之后)都会进入主存储器吗?无论我同步什么?

java synchronize threadpool

6
推荐指数
1
解决办法
1577
查看次数

Hashtable:为什么get方法同步?

我知道a Hashtable是同步的,但为什么它的get()方法是同步的?

它只是一种读取方法吗?

java hashtable synchronize

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

同步不同服务器上的mongo数据库

我有下一个情况.我在不同的服务器上有两个mongodb实例.例如

Mongodb instance on server "one" (host1:27017) with database: "test1"
Mongodb instance on server "two" (host2:27017) with database: "test2"
Run Code Online (Sandbox Code Playgroud)

现在,我需要将"host1:27017"中的"test1"数据库与"host2:27017"中的"test2"同步.

通过"同步"我的意思是下一个:

  1. 如果"test2"中的某些集合不存在于"test2"中,那么该集合应该在"test1"数据库中完全复制.

  2. 如果"test2"数据库中不存在某些来自集合的记录,则必须添加否则更新.如果"test1"数据库中的A集合中不存在记录,但存在于"test2"数据库中的A集合中,则必须从"test2"中删除记录.

顺便说一下这里是个问题.例如:"test1"数据库的集合"A"包含以下文档:

{
 _id: "1",
 name: "some name"
}
Run Code Online (Sandbox Code Playgroud)

"test2"数据库的集合"A"包含以下文档:

{
 _id: "1",
 name: "some name"
}

{
 _id: "2",
 name: "some name2"
}
Run Code Online (Sandbox Code Playgroud)

如果我执行db.copyDatabase('test1','test2',"host2:27017"),我会收到错误:

"errmsg":"例外:E11000重复键错误索引:test1.A.$ id dup key:{:\"1 \"}"

cloneDatabase命令相同.我怎么解决它?

一般来说,同步数据库的方法有哪些?我知道最简单的方法是将文件从一台服务器复制到第二台,但也许有更好的方法.

请帮忙.我是mongo的新人.谢谢.

synchronize mongodb

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