标签: synchronizing

如何跨类使用synchronized块?

我想知道如何跨类使用synchronized块.我的意思是,我想在多个类中同步块,但它们都在同一个对象上进行同步.我想到如何做到这一点的唯一方法是这样的:

//class 1
public static Object obj = new Object();

someMethod(){
     synchronized(obj){
         //code
     }
}


//class 2
someMethod(){
     synchronized(firstClass.obj){
         //code
     }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我创建了一个在第一个类中同步的任意Object,在第二个类中也通过静态引用它来同步它.但是,这对我来说似乎很糟糕.有没有更好的方法来实现这一目标?

java multithreading synchronizing

14
推荐指数
3
解决办法
3169
查看次数

CUDA:if语句中的__syncthreads()

我有一个关于CUDA同步的问题.特别是,我需要对if语句中的同步进行一些澄清.我的意思是,如果我将__syncthreads()放在if语句的范围内,该块语句被块内的一小部分线程击中,会发生什么?我认为有些线程将"永远"等待其他不会达到同步点的线程.所以,我编写并执行了一些示例代码来检查:

__global__ void kernel(float* vett, int n)
{
    int index = blockIdx.x*blockDim.x + threadIdx.x;
    int gridSize = blockDim.x*gridDim.x;

    while( index < n )
    {   
        vett[index] = 2;
        if(threadIdx.x < 10)
        {
            vett[index] = 100;
            __syncthreads();
        }
        __syncthreads();

        index += gridSize;
    }
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,我观察到输出非常"正常"(64个元素,块大小为32):

100 100 100 100 100 100 100 100 100 100 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
100 100 100 100 100 …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing cuda synchronizing

13
推荐指数
3
解决办法
6517
查看次数

如何解决Eclipse IDE中的"同步CVS"问题?

我正在尝试更新我的一个项目,但我没有管理.当我尝试时,我得到了错误

'Synchronizing CVS' has encountered a problem.
Problems reported while synchronizing CVS Workspace. 0 of 1 resources were synchronized.

Details:
Problems reported while synchronizing CVS Workspace. 0 of 1 resources were synchronized.
  An error occurred synchronizing /<Project name>: The server reported an error while performing the "cvs update" command.
    The server reported an error while performing the "cvs update" command.
      <project name>: The server did not provide any additional information.  
Run Code Online (Sandbox Code Playgroud)

我应该关心这个错误吗?它看起来一切都很好,但它困扰我.

谢谢你的阅读

更新

我发现有一个文件已更新,但结果未更新.我正在做的另一个错误是我在项目级别同步,在这些情况下我认为最好在文件夹级别同步并打开CVS控制台.要打开CVS控制台,请按窗口>打开视图>控制台.然后在控制台视图中有一个需要按下的shell图标,然后按CVS.像CVS输出一样,它显示出来并且它有助于更​​多.

eclipse cvs synchronizing

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

将更改的模型列表同步到ViewModel的ObservableList的最佳实践?

我有一个(外部)模型暴露一个不断变化的List(假设每两秒左右).ViewModel知道该列表注册了PropertyChange事件.ViewModel还为UI提供了一个ObservableCollection以进行数据绑定.

+-----------------------------------------------+
|                                           View|
| +-----------+                                 |
| |Listbox    |                                 |
| +-----------+                                 |
+-----/\----------------------------------------+
      ||
      ||DataBinding
      ||
      ||
+-----||----------------------------------------+
|     ||                               ViewModel|
| +--------------------+         +-------------+|
| |ObservableCollection|<--------|ChangeHandler||
| +--------------------+    /    +-------------+|
|                          /           ^        |
+-------------------------/------------|--------+
                         /             |
                        /              |
           Synchronizing Lists         | PropertyChanged
                                       |
                                       |
+--------------------------------------|--------+
|                                  +-----+ Model|
|                                  |IList|      |
|                                  +-----+      |
|                                               |
+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

除了不断进行的更新之外,原则上它运作良好.每次更新时,用户都会放弃他的选择,即每次更新都会取消选择所有项目.这也就不足为奇了,因为WPF的ListBox"看到"分配了一个新列表.

所以,事情必须是我们分配新的ObservableCollection,而是将当前ObservableCollection的内容与更新的Model.List合并.

现在我的问题

  • 同步列表 - 是否有关于如何进行此类合并的最佳实践(或框架)(将新项目复制到ObservableCollection,删除丢失的项目,更新更改的项目)
  • 选定项目 - 如何确保ListBox保留当前选定的项目(除了项目已被删除的情况)

wpf user-interface synchronizing observablecollection c#-4.0

9
推荐指数
1
解决办法
2752
查看次数

在eclipse中撤消"记住我的决定"以获得团队同步视角

我在一个项目中点击了鼠标的rigth按钮.
然后我点击了菜单:( Compare with --> Head Revision使用git)
然后我点击Remember my decision以始终打开team synchronizing透视图.

但我不想要开放的团队同步视角.
如何撤消此操作?

eclipse synchronizing perspective

5
推荐指数
1
解决办法
1555
查看次数

SynchronizationContext Send()应该是同一个线程吗?

我有这种情况,我尝试在创建的同一个线程上处理事件.这通常在UiThread中完成,但我不是在UiThread上开始.我有一些测试基本上有以下步骤.我遗漏了一些细节.我不确定这是否应该按照我认为的那样行事.

首先,我检查当前线程的Id

var myThreadId = Thread.CurrentThread.ManagedThreadId;
Run Code Online (Sandbox Code Playgroud)

我创建了一个SynchronizationContext,并设置为当前

var _context = new SynchronizationContext();
SynchronizationContext.SetSynchronizationContext(_context);
Run Code Online (Sandbox Code Playgroud)

然后我发送一些动作到上下文(我们现在在另一个线程)

_context.Send(x => _action(sender, e), null);
Run Code Online (Sandbox Code Playgroud)

在这个动作中,我再次检查ThreadId

Assert.Equal(myThreadId, Thread.CurrentThread.ManagedThreadId);
Run Code Online (Sandbox Code Playgroud)

这失败了.我不应该再次使用原始帖子吗?

.net c# multithreading synchronizing

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

Ace Editor同步滚动

我有两个同时运行的Ace编辑器会话,我正在尝试同步两个编辑器的垂直滚动.我找到了一个简单的jQuery方法,可以使用普通的Div,但是我怎样才能使它适应Ace?

jQuery方法:

$("#editor1").scroll(function () { 
    $("#editor2").scrollTop($("#editor1").scrollTop());
    $("#editor2").scrollLeft($("#editor1").scrollLeft());
});

$("#editor2").scroll(function () { 
    $("#editor1").scrollTop($("#editor2").scrollTop());
    $("#editor1").scrollLeft($("#editor2").scrollLeft());
});
Run Code Online (Sandbox Code Playgroud)

显然,上述方法不适用于Ace.我一直在寻找Ace API:Virtual Renderer的解决方案,但我甚至无法在编辑器上滚动时设置任何回调函数.

API Here中有对滚动条的引用,但似乎无法做任何事情.我试过像这样测试它...

editor.ScrollBar.on('scroll', function() {
    alert('Callback?');
});
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个吗?:) 谢谢.

编辑

下面的解决方案确实有效,但(在我的情况下)它几乎立即崩溃浏览器(Chrome).我在它上面设置了一个超时功能,以限制它可以多快发射,但它仍然不可避免地崩溃.想法?

editor.getSession().on('changeScrollTop', function(scroll) {
    setTimeout(function() {
        editor2.getSession().setScrollTop(scroll);
    }, 1000);
});
Run Code Online (Sandbox Code Playgroud)

jquery synchronizing vertical-scrolling ace-editor

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