标签: synchronization

立即镜像/同步从Windows到Linux服务器的文件的最佳方法

我在Windows机器上有一个目录,其中包含大量文件和文件夹,我需要观察这些文件和文件夹,并将文件立即(或尽可能近似地)镜像/同步到本地网络上的Linux机器上.

我已经调查过: - Rsync,还不够实时 - WinSCP'保持目录最新'功能,这是好的,但仅限于500个目录,性能相当慢.

有很多共享软件风格的应用程序声称可以做到这一点,但它们看起来都很可疑.似乎某处必须有一个好的FOSS解决方案?

更新:只要它是即时和自动的,我会对单向传输而不是完全同步感到满意.

synchronization file mirroring

33
推荐指数
3
解决办法
8万
查看次数

等待并在C/C++共享内存中通知

如何在Java中等待和通知在C/C++中两个或多个线程之间的共享内存?我使用pthread库.

c c++ multithreading synchronization shared-memory

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

在.NET中锁定(监视)内部实现

掌握某些技术时,你必须知道它是如何在一个抽象级别下制作的.在多线程编程的情况下,了解同步原语将是很好的.
这是一个问题,如何在.NET中实现Lock(Monitor)?

我对以下几点感兴趣:
- 它是否使用OS对象?
- 是否需要用户模式或内核模式?
- 等待锁定的线程的开销是多少?
- 在什么情况下,等待锁的线程队列可能会被违反?

更新:
"如果有多个线程争用锁定,它们会在"就绪队列"上排队,并按照先到先得的原则授予锁定.注意:Windows和CLR行为的细微差别意味着有时会违反队列的公平性. "[C#4.0 in a Nutshell,Joseph Albahari]所以这就是我在关于'违规队列'的最后一个问题中所要求的.

.net c# multithreading synchronization monitor

33
推荐指数
2
解决办法
9919
查看次数

同步整数值

可能重复:
增加java中锁的数量的最佳方法是什么

假设我想基于整数id值进行锁定.在这种情况下,有一个函数可以从缓存中提取值,并且如果值不存在则执行相当昂贵的检索/存储到缓存中.

现有代码未同步,可能会触发多个检索/存储操作:

//psuedocode
public Page getPage (Integer id){
   Page p = cache.get(id);
   if (p==null)
   {
      p=getFromDataBase(id);
      cache.store(p);
   }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是同步id上的检索,例如

   if (p==null)
   {
       synchronized (id)
       {
        ..retrieve, store
       }
   }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,因为2个单独的调用可以具有相同的Integer id值但是具有不同的Integer对象,因此它们不会共享锁,并且不会发生同步.

有没有一种简单的方法可以确保您拥有相同的Integer实例?例如,这会工作:

 syncrhonized (Integer.valueOf(id.intValue())){
Run Code Online (Sandbox Code Playgroud)

Integer.valueOf()的javadoc似乎意味着您可能会获得相同的实例,但这看起来不像是一个保证:

返回表示指定int值的Integer实例.如果不需要新的Integer实例,通常应优先使用此方法,而不是构造函数Integer(int),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能.

那么,关于如何获得保证相同的Integer实例的任何建议,除了更精细的解决方案,比如保持Lock对象的WeakHashMap键入int?(没错,看起来似乎必须有一个明显的单行而不是我错过了).

java synchronization

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

多人游戏同步

我实现了服务器/客户端架构,所有状态更改都发送到函数,验证并广播到所有连接的客户端.这种方法效果很好,但系统目前还没有在游戏的客户端实例之间保持同步.

如果服务器和特定客户端之间恰好有5秒的延迟,那么他将在其余客户端5秒后收到状态更改,从而使他的游戏状态不同步.我一直在寻找各种方法来实现客户端之间的同步系统,但到目前为止还没有找到多少.

我是网络编程的新手,并不是那么天真地认为我可以自己发明一个工作系统而不需要花费大量时间.然而,我所拥有的想法是保留某种时间系统,因此每个状态更改都将与游戏中的特定时间戳相关联.这样,当客户端收到状态更改时,它将准确知道更改发生在游戏的哪个时段,并且反过来能够关联延迟.这种方法的问题在于,在那些n秒延迟游戏将继续在客户端,因此客户端将不得不及时回滚以更新状态更改,这肯定会变得混乱.

所以我正在寻找论文讨论解决它的主题或算法.也许我对多人游戏系统如何工作的整体设计存在缺陷,在某种意义上说,除非从服务器收到概念,否则客户端的游戏实例不应该更新?现在客户只是在游戏循环中更新自己,假设任何状态都没有改变.

c# networking synchronization

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

使用async/await进行资源锁定

我有一个应用程序,我有一个共享资源(一个运动系统),可以由多个客户端访问.我有个别操作需要在移动期间访问系统,如果同时请求冲突操作,则应该抛出"忙"异常.我也有序列发生器需要获得对Motion系统的独占访问权,以执行多个操作,并穿插其他操作; 在整个序列中,没有其他客户端应该能够运行操作.

我传统上使用Thread-affinity接近它,因此Thread可以请求独占访问并运行与操作相对应的阻塞调用.虽然线程具有访问权限,但没有其他线程可以使用该资源.我现在遇到的问题是我已经开始使用async/await模式实现我的系统,以允许更清晰的序列器实现.问题是现在我的音序器并不总是在同一个线程上运行; 活动线程可以在回调过程中发生变化,因此不再容易确定我是否处于有效的上下文中以保持运行操作.一个注意事项是一些操作本身由等待组成,这意味着序列和单个操作都可以跨越多个线程.

我的问题:是否有人知道一个好的模式来处理由于异步/等待而存在线程切换时获取独占访问权限?

作为参考,我考虑过一些事情:

  1. 我可以创建一个自定义的SynchronizationContext,它将序列持续时间内的所有sequencer调用封送回单个Thread.这样可以让我重用现有的线程相关访问管理代码.缺点是每当我执行一个序列或操作时,这将需要专用一个线程(因为操作也可以跨越多个线程.)

  2. 创建一个可获取的访问令牌以传递给Operation方法,以证明您已获得访问权限.这具有使用令牌参数膨胀方法的缺点.

  3. 使用(2)中的访问令牌方法,但为Operations接口创建一个重复的接口实现,以便可以使用令牌"烘焙"实例化包装器.这会创建一些丑陋的胶水代码,但它会清除序列代码,以便它不再需要将令牌传递给每个方法.

.net c# synchronization locking async-await

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

在C#中锁定空闲堆栈和队列

有没有人知道是否有可用于.NET的无锁容器库?

最好的东西被证明比我们在.NET中使用的Synchronized包装器更有效.

我在.NET上发现了一些文章,但没有一篇文章指出任何速度基准测试,也没有激发他们对可靠性的信心.

谢谢

.net multithreading synchronization lock-free data-structures

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

是否将指针视为C中的原子动作?

如果我有一个多线程程序通过引用读取缓存类型的内存.我可以通过主线程更改此指针,而不会冒任何其他线程读取意外值的风险.

在我看来,如果更改是原子的,其他线程将读取旧值或更新值; 从不随机内存(或空指针),对吧?

我知道无论如何我应该使用同步方法,但我仍然很好奇.

指针变化是原子的吗?

更新:我的平台是64位Linux(2.6.29),虽然我也想要一个跨平台的答案:)

c multithreading synchronization

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

自动保持辅助仓库与主仓库同步?

我们有两层设置.

我们有一个主存储库(下面称为"主要").

还有一个二级存储库(下面称为"二级"),它是这样创建的:

$ git clone --bare --shared $REPO_A/primary secondary.git
Run Code Online (Sandbox Code Playgroud)

在辅助存储库上工作的人将来自主存储库的分支视为只读,但是将这些分支基于这些分支.

我们希望每天一次将辅助存储库与主存储库同步.

也就是说,我们希望提交到主服务器的提交和新分支对于在辅助存储库中工作的人员是可见的(下次他们执行拉动).

我们不希望这是对称的,即对于在主存储库之外工作的人来说,对辅助存储库的活动不会变得可见.

理想情况下,我想运行一台运行在机器上的cron作业,该辅助存储库以某种方式从主服务器获取新数据并自动将其包含到辅助服务器中.

我希望有一个简单的方法可以做到这一点(我希望有人在这里告诉我有).

如果我要写一个脚本来做它,它会做:

由于我是git的新手,如果我没有考虑某些基本问题,我不会感到惊讶吗?

就像我说的那样,我希望有一种更简单的方法可以做到这一点,即有人说"哦,不要那么做,只做......".

git synchronization repository

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

在PhoneGap中与服务器同步数据的策略

我正在使用AngularJS开始我的第一个PhoneGap项目.它是一个数据库驱动的应用程序,使用REST API作为后端.首先,我根本不打算在本地存储数据,因此没有Internet就不会有太大的作用.

但是,我最终希望它能在本地存储数据,并在互联网可用时同步,因为我知道我个人有时会禁用手机上的互联网连接(飞机,电池电量不足),或者没有酒吧.我想知道你是否可以指出我为这种类型的同步提供一些好的资源.一些推荐的库?或者也许是对陷阱的讨论以及如何环绕它们.我用谷歌搜索了一下,但我想现在,我不知道要问的问题.

此外,我打算先建立互联网依赖,然后添加同步....这是一个好主意,还是我在脚下拍摄自己?我是否需要从一开始就建立同步?

我有人建议首先将应用程序构建为仅限本地的应用程序,而不是仅限于Internet的部分,它具有一定的逻辑性.远程存储对我来说很重要.我知道决定与我的应用目标有很大关系,但从建立这个目标的角度来看,最终的目标是本地存储+互联网存储,以及双向同步,哪些更容易?或者它甚至有所作为?

首先,我正在考虑使用UUID,而不是顺序整数主键.我还想过为每个设备分配一个ID,该ID在它生成的任何键上都有前缀,但这看起来很精致.有人使用过哪种技术?思考?

我想我需要一个好的系统来判断哪些数据已被同步.在客户端,我猜任何创建/编辑的记录都可以标记为同步.但是在服务器端,您有多个客户端,因此不起作用.我想你可以有一个last_updated时间戳,并同步所有更新同步上次成功同步.

在多个地方编辑的记录怎么样?如果两个客户端编辑,然后想要同步,则有一些关于合并的歧义,比如在git或其他版本控制系统中合并分支时.你怎么处理?我想git通过存储每个提交的差异来做到这一点.我想你可以存储差异?我想的越多,听起来就越复杂.我是在过度思考还是在思考它?

客户端存储怎么样?我已经考虑过SQLite或PhoneGap本地存储(http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html).建议?同步将通过REST API,交换JSON,所以我在想一些实际上将数据存储为JSON的东西,或者类似JSON的东西,它很容易转换,会很好.另一方面,如果我不得不交换某种数据差异格式,也许这就是我需要存储的东西?

synchronization angularjs cordova

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