Questions tagged «locking»

锁定使不同类型的资源一次只能由一个进程使用。

2
对UPDLOCK,HOLDLOCK感到困惑
在研究表提示的使用时,我遇到了两个问题: 我应该使用哪些锁定提示(T-SQL)? HOLDLOCK对UPDLOCK有什么影响? 对这两个问题的回答都表明,使用时(UPDLOCK, HOLDLOCK),其他进程将无法读取该表上的数据,但是我没有看到这一点。为了进行测试,我创建了一个表并启动了两个SSMS窗口。在第一个窗口中,我运行了一个使用各种表提示从表中选择的事务。在事务运行时,我从第二个窗口运行了各种语句,以查看哪些将被阻止。 测试表: CREATE TABLE [dbo].[Test]( [ID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](50) NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 从SSMS窗口1: BEGIN TRANSACTION SELECT …

9
监控与锁定
什么时候在C#中使用Monitor类或lock关键字来确保线程安全? 编辑: 从到目前为止的答案看来,这lock是对该Monitor课程的一系列电话的简称。锁定调用简写的确切含义是什么?更明确地说, class LockVsMonitor { private readonly object LockObject = new object(); public void DoThreadSafeSomethingWithLock(Action action) { lock (LockObject) { action.Invoke(); } } public void DoThreadSafeSomethingWithMonitor(Action action) { // What goes here ? } } 更新资料 谢谢大家的帮助:作为您提供的某些信息的后续,我还发布了另一个问题。由于您似乎对此领域很精通,因此我发布了链接:锁定和管理锁定异常的解决方案有什么问题?

3
lock(new object())—货物崇拜还是某种疯狂的“语言特殊情况”?
我正在审查由顾问编写的一些代码,虽然已经弹出了许多危险信号,但我无法将头包裹在以下代码片段中: private void foo() { if (InvokeRequired) { lock (new object()) { if (m_bar!= null) Invoke(new fooDelegate(foo), new object[] { }); } } else { if(OnBazChanged != null) OnBazChanged(); } } lock(new object())在这里做什么?因为它总是锁定在另一个对象上,所以应该没有任何作用,但是这种锁定在整个代码中都是持久的,即使在未复制粘贴的部分中也是如此。这是C#语言中的某种特殊情况,被编译成我不知道的东西吗?还是程序员只是采用了一些前一段时间发生的工作?

6
如果内部发生异常,锁定的对象是否保持锁定状态?
在ac#线程应用程序中,如果我要锁定对象,可以说一个队列,如果发生异常,该对象会保持锁定状态吗?这是伪代码: int ii; lock(MyQueue) { MyClass LclClass = (MyClass)MyQueue.Dequeue(); try { ii = int.parse(LclClass.SomeString); } catch { MessageBox.Show("Error parsing string"); } } 据我了解,捕获后的代码无法执行-但我一直在想是否会释放该锁。


8
如何在JavaScript中实现锁定
如何lock在JavaScript中实现与C#等效的功能? 因此,解释一下我在想一个简单的用例是: 用户单击按钮B。 B引发一个onclick事件。如果B是在event-state事件等待B是在ready-state传播之前。如果Binready-state中的B被锁定并设置为event-state,则事件传播。事件的传播完成后,B设置为ready-state。 我可以看到仅通过ready-state在按钮中添加和删​​除类,就能完成与此类似的事情。但是,问题在于用户连续单击按钮的时间比设置变量的速度快两次,因此在某些情况下,这种锁定尝试将失败。 有谁知道如何实现在JavaScript中不会失败的锁?


5
Parallel.ForEach与添加到列表
我正在尝试运行连接到远程站点(通过网络)并返回通用列表的多个功能。但是我想同时运行它们。 例如: public static List<SearchResult> Search(string title) { //Initialize a new temp list to hold all search results List<SearchResult> results = new List<SearchResult>(); //Loop all providers simultaneously Parallel.ForEach(Providers, currentProvider => { List<SearchResult> tmpResults = currentProvider.SearchTitle((title)); //Add results from current provider results.AddRange(tmpResults); }); //Return all combined results return results; } 正如我所看到的,可能同时发生多次插入“结果” …

18
如何在Android中禁用“主页”和其他系统按钮?
我需要在Android应用程序中禁用“主页”和其他系统按钮。 例如: MX Player(见谷歌播放) -你可以按在播放器屏幕上“锁”图标,并锁定所有的硬件和软件系统的按钮。 它可以正常工作而无需生根。 我在具有不同Android版本的某些设备上进行了测试。我试图拆卸儿童锁(插件),但尚不知道它如何工作。 我需要用于儿童锁(插件)的相同解决方案MX Player:-禁用主页,后退和所有其他系统按钮。 有什么建议么?
80 android  locking  kiosk 

10
什么时候ReaderWriterLockSlim比简单的锁好?
我用这段代码在ReaderWriterLock上做了一个非常愚蠢的基准测试,其中读取发生的频率比写入高4倍: class Program { static void Main() { ISynchro[] test = { new Locked(), new RWLocked() }; Stopwatch sw = new Stopwatch(); foreach ( var isynchro in test ) { sw.Reset(); sw.Start(); Thread w1 = new Thread( new ParameterizedThreadStart( WriteThread ) ); w1.Start( isynchro ); Thread w2 = new Thread( …

4
在SQL Server中强制查询超时
面对缓慢的数据库,我们遇到了一个代码块响应不佳的问题(它使查询超时陷入困境)。我们已经创建了一个补丁,并且正在通过回归运行它。 我们无法超时。我已经从SQL Mgmt Studio中打开了一个事务,并更新了每一行以锁定它们,但这并不会导致INSERT超时(这正是我所需要的)。 我可以通过T-SQL轻松获得表级锁吗?还是我必须摆弄主人?还是可以轻松地强制超时而不锁定?任何输入表示赞赏。

7
为什么在双重检查锁定中使用了volatile
在Head First设计模式手册中,具有双重检查锁定的单例模式已实现如下: public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 我不明白为什么volatile要使用它。volatile使用不会 违反使用双重检查锁定(即性能)的目的吗?

9
由于GIL,在多线程Python代码中是否不需要锁?
如果您依赖具有全局解释器锁(即CPython)的Python实现并编写多线程代码,那么您真的需要锁吗? 如果GIL不允许并行执行多个指令,那么共享数据是否有必要保护吗? 抱歉,这是一个愚蠢的问题,但这是我一直想知道的关于多处理器/核心计算机上的Python的东西。 同样的情况也适用于具有GIL的任何其他语言实现。

5
Java并发:CAS与锁定[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 我正在阅读《实践Java并发》一书。在第15章中,他们讨论了非阻塞算法和比较交换(CAS)方法。 据记载,CAS的性能比锁定方法好得多。我想问一下已经使用这两个概念的人,并想听听您更喜欢这些概念中的哪一个?真的那么快吗? 对我来说,锁的用法更加清晰,易于理解,甚至维护起来也更好(如果我错了,请更正我)。我们是否应该真正专注于创建与CAS相关的并发代码,而不是锁定,以获得更好的性能提升,或者可持续性更重要? 我知道何时使用什么可能没有严格的规定。但是我只是想听听一些有关CAS新概念的意见和经验。

4
是否可以保证Task.Factory.StartNew()使用调用线程以外的其他线程?
我正在从一个函数启动一个新任务,但我不希望它在同一线程上运行。我不在乎它在哪个线程上运行,只要它在另一个线程上即可(因此在此问题中无济于事)。 我是否保证下面的代码TestLock在Task t再次允许输入之前总是退出?如果不是,为防止重入,推荐的设计模式是什么? object TestLock = new object(); public void Test(bool stop = false) { Task t; lock (this.TestLock) { if (stop) return; t = Task.Factory.StartNew(() => { this.Test(stop: true); }); } t.Wait(); } 编辑:根据乔恩·斯凯特(Jon Skeet)和史蒂芬·图布(Stephen Toub)的以下回答,一种确定性地防止重入的简单方法是传递CancellationToken,如以下扩展方法所示: public static Task StartNewOnDifferentThread(this TaskFactory taskFactory, Action action) { return taskFactory.StartNew(action: action, cancellationToken: …

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.