1
12
如注释所示,一种方法是拥有一个固定的锁池(比如32),并使用ID模块32来确定要使用哪个锁。这将导致一些错误的锁共享。32是从空气中选择的数字-这取决于您的ID值分布、消费者数量等。 |
2
2
你能让你的ID对每个对象都是唯一的吗?如果是这样,您可以对对象本身应用一个锁。 |
3
2
编辑:我没有仔细阅读,这是关于(大量)创建的助手对象。
关于
不,坏主意。你可以锁上一根绳子,但是你得担心它们会被关在什么地方。很难确定它们是独一无二的。 |
4
0
我将把一个同步的FIFO队列看作是一个单独的类/单例,用于所有生成的对象——生产者将对象排队,消费者排队——因此实际的对象不再需要任何同步。然后在实际对象之外进行同步。 |
5
0
如何从ID对象池分配ID并锁定这些对象? 创建项目时:
ID池创建和维护共享ID实例:
然后锁定ID,该ID现在是consume方法中的引用:
这不是最佳解决方案,只会将问题转移到另一个地方——但是如果您认为您对锁有压力,那么使用这种方法可能会提高性能(例如,您的对象是在单个线程上创建的,那么您不需要同步ID池)。 |
6
0
见 How to: Synchronize a Producer and a Consumer Thread (C# Programming Guide)
--编辑—— 一 simple code snippet 我有时会回信,看看这是否有帮助。我想这就是伟人所指的? --编辑—— 下面怎么样?
现在,当您检查以下内容时
|
a a · 为什么在这个可重入锁示例中需要引用计数? 2 年前 |
JohnLBevan · 为什么原子语句上需要锁提示? 6 年前 |
Jay Wang · 生产者/消费者实施:陷入消费者循环 6 年前 |
Andremoniy · 悲观写入是否锁定整个表? 6 年前 |
Marcus Cemes · 选择。。。用于更新在提交后选择旧数据 6 年前 |
Ins0maniac · Rails,锁定数据库中的记录 7 年前 |