我想知道如何跨类使用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,在第二个类中也通过静态引用它来同步它.但是,这对我来说似乎很糟糕.有没有更好的方法来实现这一目标?
我有一个关于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) 我正在尝试更新我的一个项目,但我没有管理.当我尝试时,我得到了错误
'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输出一样,它显示出来并且它有助于更多.
我有一个(外部)模型暴露一个不断变化的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合并.
现在我的问题
wpf user-interface synchronizing observablecollection c#-4.0
我在一个项目中点击了鼠标的rigth按钮.
然后我点击了菜单:( Compare with --> Head Revision使用git)
然后我点击Remember my decision以始终打开team synchronizing透视图.
但我不想要开放的团队同步视角.
如何撤消此操作?
我有这种情况,我尝试在创建的同一个线程上处理事件.这通常在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)
这失败了.我不应该再次使用原始帖子吗?
我有两个同时运行的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)