Questions tagged «synchronization»

同步是指使用控件来维护一个一致的表示形式,或者是一组运行同一程序的进程(进程同步),或者是数据表示形式(数据同步)。

5
如何使用CancellationToken属性?
与前面的RulyCanceler类代码相比,我想使用来运行代码 CancellationTokenSource。 如取消令牌中所述,如何使用它,即不引发/捕捉异常?我可以使用IsCancellationRequested财产吗? 我试图这样使用它: cancelToken.ThrowIfCancellationRequested(); 和 try { new Thread(() => Work(cancelSource.Token)).Start(); } catch (OperationCanceledException) { Console.WriteLine("Canceled!"); } 但这cancelToken.ThrowIfCancellationRequested();在方法中产生了运行时错误Work(CancellationToken cancelToken): System.OperationCanceledException was unhandled Message=The operation was canceled. Source=mscorlib StackTrace: at System.Threading.CancellationToken.ThrowIfCancellationRequested() at _7CancellationTokens.Token.Work(CancellationToken cancelToken) in C:\xxx\Token.cs:line 33 at _7CancellationTokens.Token.<>c__DisplayClass1.<Main>b__0() in C:\xxx\Token.cs:line 22 at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, …



5
如何在不使用time.Sleep的情况下等待所有goroutine完成?
这段代码将选择同一文件夹中的所有xml文件,作为被调用的可执行文件,并以异步方式将处​​理应用于回调方法中的每个结果(在下面的示例中,仅打印出文件名)。 如何避免使用sleep方法阻止main方法退出?我在解决问题时遇到了麻烦(我想这就是同步结果所需要的),因此对您有所帮助! package main import ( "fmt" "io/ioutil" "path" "path/filepath" "os" "runtime" "time" ) func eachFile(extension string, callback func(file string)) { exeDir := filepath.Dir(os.Args[0]) files, _ := ioutil.ReadDir(exeDir) for _, f := range files { fileName := f.Name() if extension == path.Ext(fileName) { go callback(fileName) } } } func main() …



18
Node.js中的同步请求
如果我需要按顺序调用3 http API,那么以下代码将是更好的选择: http.get({ host: 'www.example.com', path: '/api_1.php' }, function(res) { res.on('data', function(d) { http.get({ host: 'www.example.com', path: '/api_2.php' }, function(res) { res.on('data', function(d) { http.get({ host: 'www.example.com', path: '/api_3.php' }, function(res) { res.on('data', function(d) { }); }); } }); }); } }); }); }

6
Vagrant中的符号链接和同步文件夹
我想使用Vagrant为我的团队提供一个通用的开发环境。主机完全不同: 一些使用OS X,一些Linux和一些Windows。 有些使用VMware,有些使用VirtualBox。 在虚拟机内部,我们要运行Linux。 到目前为止,一切都很好。 现在我们的想法是每个开发人员都可以使用他们选择的IDE,因此,我们引入了一个同步文件夹,该文件夹在主机和VM之间共享源代码。基本上,它也可以工作……除了符号链接。 在我们的源代码内部,我们实际上确实有一些符号链接,这在VM内部的Linux中不是问题,但是在作为主机的Windows上会引起问题。我们唯一不能做的就是摆脱符号链接,因此我们需要另一种方式来处理这个问题。 到目前为止,我们已经尝试了多种选择: Vagrant 问题中提到了一种解决方法,很遗憾,这仅适用于VirtualBox,对运行VMware的人员没有帮助。到目前为止,根据所使用的提供程序,我们还没有找到在Vagrantfile中运行代码的方法。 现在,我们尝试使用rsync类型而不是使用标准的共享文件夹。这在Windows上有效,但在OS X上崩溃,并显示许多错误symlink has no referent(每个符号链接一个错误)。 我们考虑过NFS,但这仅在不将Windows用作主机的情况下有效。 我们虽然也关于SMB,但是这再次只能在Windows上作为主机工作。 我无法想象我们是这个星球上唯一或第一个遇到共享文件夹中的多平台主机和符号链接问题的人。 您如何解决此问题,以便我们可以保留符号链接,但仍使用不同的主机操作系统?


8
如何使ArrayList成为线程安全的?用Java解决问题的另一种方法?
我有一个ArrayList,我想用来容纳RaceCar对象,这些对象在执行完后立即扩展Thread类。名为Race的类使用RaceCar对象完成执行后调用的回调方法来处理此ArrayList。回调方法addFinisher(RaceCar finisher)将RaceCar对象添加到ArrayList。这应该给出线程完成执行的顺序。 我知道ArrayList不同步,因此不是线程安全的。我尝试使用Collections.synchronizedCollection(c Collection)方法,方法是传入新的ArrayList并将返回的Collection分配给ArrayList。但是,这给了我一个编译器错误: Race.java:41: incompatible types found : java.util.Collection required: java.util.ArrayList finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); 以下是相关代码: public class Race implements RaceListener { private Thread[] racers; private ArrayList finishingOrder; //Make an ArrayList to hold RaceCar objects to determine winners finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); //Fill array with RaceCar objects for(int i=0; …

16
等到flag = true
我有这样的javascript函数: function myFunction(number) { var x=number; ... ... more initializations //here need to wait until flag==true while(flag==false) {} ... ... do something } 问题是javascript卡在了一段时间,卡住了我的程序。所以我的问题是,如何在函数中间等待,直到没有“忙等待”标志为真?

1
没有打印语句,循环看不到其他线程更改的值
在我的代码中,我有一个循环,等待某个状态从其他线程更改。另一个线程可以工作,但是我的循环从未看到更改过的值。它永远等待。但是,当我System.out.println在循环中放入一条语句时,它突然起作用了!为什么? 以下是我的代码示例: class MyHouse { boolean pizzaArrived = false; void eatPizza() { while (pizzaArrived == false) { //System.out.println("waiting"); } System.out.println("That was delicious!"); } void deliverPizza() { pizzaArrived = true; } } 在while循环运行时,我deliverPizza()从另一个线程调用以设置pizzaArrived变量。但是循环仅在我取消注释该System.out.println("waiting");语句时有效。这是怎么回事?

5
如何保持两个文件夹自动同步?
我想要一个文件夹及其所有子树的同步副本。 它应该以这种方式自动工作:每当我在原始文件夹中创建,修改或删除内容时,这些更改都应自动应用于同步文件夹。 哪个是完成此任务的最佳方法? 顺便说一句:我在Ubuntu 12.04上 最终目标是拥有单独的实时备份副本,而无需使用符号链接或安装。我使用Ubuntu One在计算机之间同步数据,过了一会儿出现问题,并且在同步期间所有数据都丢失了。 因此,我想进一步采取措施来保留数据的备份副本: 我将数据存储在“文件夹A”中 我需要我当前问题的答案才能创建“文件夹A”到“文件夹B”的单向同步(cron带有rsync?的脚本可能是?)。我需要它只能是从A到B的单向方式,对B的任何更改都不能应用于A。 我只需保持与Ubuntu One的同步“文件夹B”, 就可以通过这种方式将A中的任何更改都添加到B中,然后将其从U1中检测到并同步到云中。如果出了什么问题,并且U1删除了B上的数据,我总是将它们放在A上。 受到lanzz评论的启发,另一个想法可能是在启动时运行rsync来备份Ubuntu One下的文件夹内容,并仅在rsync完成后才启动Ubuntu One。 您如何看待?如何知道rsync何时结束?

7
Java同步块与Collections.synchronizedMap
是否设置了以下代码以正确同步调用synchronizedMap? public class MyClass { private static Map<String, List<String>> synchronizedMap = Collections.synchronizedMap(new HashMap<String, List<String>>()); public void doWork(String key) { List<String> values = null; while ((values = synchronizedMap.remove(key)) != null) { //do something with values } } public static void addToMap(String key, String value) { synchronized (synchronizedMap) { if (synchronizedMap.containsKey(key)) { …

15
是C ++读写int原子吗?
我有两个线程,一个线程更新一个int,另一个读取它。这是一个统计值,其中读取和写入的顺序无关紧要。 我的问题是,是否仍然需要同步对此多字节值的访问?或者换一种说法,可以完成部分写入并使其中断,然后进行读取。 例如,考虑一个值为0x0000FFFF的值,该值的增量值为0x00010000。 是否有一段时间我应该担心该值看起来像0x0001FFFF?当然,类型越大,越可能发生这种情况。 我一直同步这些类型的访问,但是很好奇社区的想法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.