Tag: 并发

JavaScript的信号量/testing和设置/锁?

在Javascript中是否有像primefacestesting和设置,信号量或locking的东西? 我有JavaScript通过自定义协议调用asynchronous后台进程(后台进程字面上运行在一个单独的进程,与浏览器无关)。 我相信我正处于竞赛状态; 后台进程返回我的testing和我的设置之间,搞砸了JavaScript的一面。 我需要一个testing和设置操作,使其成为一个真正的信号量。 以下是试图检测后台进程并将其排队的javascript代码: Call = function () { var isRunning = true, queue = []; return { // myPublicProperty: "something", call: function (method) { if (isRunning) { console.log("Busy, pushing " + method); queue.push(method); } else { isRunning = true; objccall(method); } }, done: function() { isRunning = false; if (queue.length > 0) […]

C ++ 11中有没有并发容器?

特别是,我正在寻找一个阻塞队列。 C ++ 11中有这样的事情吗? 如果不是,我的其他select是什么? 我真的不想自己去了线程水平了。 太容易出错。

networking共享文件夹中GIT回购的并发性

我想有一个裸的git存储库(Windows)networking共享存储。 我使用的是Linux,并且使用CIFS安装了所述networking共享。 我的coleague使用的是Windows XP,并且将networking共享作为networking驱动器(从ActiveDirectory以某种方式)自动安装。 我不知道是否可以使用两台计算机的回购,没有并发问题。 我已经testing过了,在我的最后,我可以克隆好,但是如果我们同时访问相同的回购(push / pull),恐怕会发生什么。 在git FAQ中有关于使用networking文件系统的参考(以及SMBFS的一些问题),但我不确定是否有networking/服务器/ windows / linux完成任何文件locking – 我确定没有“T。 那么,有没有人在networking共享上使用了git repo,没有服务器,没有问题? 谢谢, 亚历克斯 PS:我想避免使用http服务器(或git-daemon),因为我没有访问带有共享的服务器。 此外,我知道我们可以从一个推到另一个,但是我们需要在代码/回购上有备份的原因。 更新: 我担心的不是networking故障的可能性。 即便如此,我们也会在当地设立所需的分支机构,我们将能够编制我们的资料来源。 但是,我们通常会经常犯下这个错误,而且经常需要重新绑定/合并。 从我的观点来看,最好的select是在股票上有一个中央回购(所以备份是有保证的),我们都会从这一个中克隆出来,然后用它来重组。 但是,由于我们经常这样做,如果发生同时推/拉的情况,我恐怕文件/回购腐败 。 通常情况下,每当我们访问远程回购时,我们都会互相大叫) ,但是最好是由计算机/networking来保护它。 而且,GIT可能有一个内部机制来做到这一点(因为有人可以在你工作的时候推送到你的回购协议中),但是我还没有发现任何结论。 更新2: 共享驱动器上的回购将是一个裸回购,不包含工作副本。

Java 8不安全:xxxFence()指令

在Java 8中,三个内存屏障指令被添加到Unsafe类( 源 )中: /** * Ensures lack of reordering of loads before the fence * with loads or stores after the fence. */ void loadFence(); /** * Ensures lack of reordering of stores before the fence * with loads or stores after the fence. */ void storeFence(); /** * Ensures lack of reordering of […]

确保线程池中的任务执行顺序

我一直在阅读有关线程池模式,我似乎无法find以下问题的通常解决scheme。 我有时想让任务连续执行。 例如,我从文件中读取文本块,出于某种原因,我需要按照该顺序处理块。 所以基本上我想要消除一些任务的并发性。 考虑这种情况,带*的任务需要按照它们的顺序进行处理。其他任务可以按任意顺序处理。 push task1 push task2 push task3 * push task4 * push task5 push task6 * …. and so on 在一个线程池的上下文中,没有这个约束,一个待处理任务的队列工作正常,但是在这里显然没有。 我想过让一些线程在一个线程特定的队列上运行,其他的在“全局”队列上运行。 然后,为了连续执行一些任务,我只需将它们推送到单个线程所在的队列中。 这听起来有点笨拙。 所以,在这个漫长的故事中真正的问题是:你将如何解决这个问题? 你将如何确保这些任务是有序的 ? 编辑 作为一个更普遍的问题,假设上面的情况变成了 push task1 push task2 ** push task3 * push task4 * push task5 push task6 * push task7 ** push task8 * […]

在并发编程的情况下,“数据种族”和“竞争条件”是否是同一事物?

我经常发现这些术语在并发编程的环境中使用。 他们是相同的还是不同的?

如何使应用程序线程安全?

我认为线程安全,特别是,它意味着它必须满足multithreading访问相同的共享数据的需要。 但是,这个定义似乎还不够。 任何人都可以列出的事情要做或照顾使应用程序线程安全 。 如果可能的话,就C / C ++语言给出一个答案。

为什么没有更多的Java代码使用PipedInputStream / PipedOutputStream?

最近我已经“发现”了这个成语,而且我想知道是否有什么东西丢失了。 我从来没有见过它使用。 几乎所有与“野外”合作的Java代码都倾向于将数据浸入string或缓冲区,而不是像本示例中那样(使用HttpClient和XML API): final LSOutput output; // XML stuff initialized elsewhere final LSSerializer serializer; final Document doc; // … PostMethod post; // HttpClient post request final PipedOutputStream source = new PipedOutputStream(); PipedInputStream sink = new PipedInputStream(source); // … executor.execute(new Runnable() { public void run() { output.setByteStream(source); serializer.write(doc, output); try { source.close(); } catch (IOException […]

Java:wait()是否释放同步块的locking

我的印象是wait()释放所有的锁,但我发现这个post说 “在同步方法内调用等待是获取固有locking的简单方法” 请澄清我有点困惑。 http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

MS Access(MDB)并发

对于一个小项目,我需要使用一个简单的数据库,要求非常简单:几张表,总共不超过几千条logging,2或3个用户。 我在.NET环境中工作。 作为一个数据库服务器(即使那些Express版本)在这种情况下似乎是一个巨大的矫枉过正,一个非常简单的MDB数据库可以满足大多数需求。 然而,我担心并发。 我的想法是将.mdb文件放在networking共享上,并让用户从基于.NET的客户端访问此文件。 数据库主要针对只读操作,但用户偶尔也需要更新/删除logging。 如果在这个时候这是不可能的(由于数据库被locking或者其他原因),我可以在客户端保存更新并在稍后处理。 这个问题本身就是这样的: 在MDB中如何处理并发读取? 在MDB中如何处理并发更新/删除? 有没有锁的概念,我怎么能在.NET应用程序中使用它? 将MDB文件放在networking共享上是好还是坏的想法? 当我在.NET中工作时,我也很想知道如何检测任何并发问题并采取适当的措施。 也就是说,我应该抓住哪个例外,你会采取什么行动? 编辑 :这可能是我的问题的不好描述,但大多数的答案似乎build议去一个完整的数据库服务器。 我确实了解安装服务器的差异和好处,实际上在MSSQL和Oracle上实现了相当数量的项目。 但在这个问题上,我只关心Access及其并发问题,所以请不要build议db服务器。 谢谢你的帮助。