【发布时间】:2011-04-12 15:28:29
【问题描述】:
.net 中是否有一个结构或模式定义了一段代码可以被多个线程访问,但如果任何线程在其他代码段中则阻塞(反之亦然)?例如:
void SomeOperationA()
{
Block( B )
{
Segment1:
... only executes if no threads are executing in Segment2 ...
}
}
}
void SomeOperationB()
{
Block( A )
{
Segment2:
... only executes if no threads are executing in Segment1 ...
}
}
编辑
几个线程应该能够同时访问 Segment1/Segment2(一次只有一个 Segment 处于“活动状态”。如果 Segment 1 正在执行,另一个线程应该能够执行 Segment1 而不是 Segment2。
编辑 2
鉴于所有 cmets/回复和我的真实场景,我意识到要求 Segment2 由多线程访问有点疯狂。
【问题讨论】:
-
多个线程可以同时执行Segment2吗?
-
听起来像是饥饿的秘诀。
-
@SFun28:这个在现实世界中的应用是什么?
-
这是现实世界的场景:Segment2 将 ConcurrentDictionary 序列化到磁盘。不时发生。序列化的时候,一定要保证字典是稳定的。 Segment1 读取和/或更改数据。它是线程安全的,因为 ConcurrentDictionary 是线程安全的。我们希望 Segment1 中的高吞吐量,但如果执行 Segment2,我们希望停止显示。如果我们尝试执行 Segment2,我们希望保持该行直到完成 Segment1 的执行。希望有帮助。
-
添加到我上面的“真实世界”场景:调用代码不会独占段 1 - 段 1 可能会在一段时间内受到重击,然后段 2 将被调用,等等。该机制只是为了采取安全措施。
标签: c# .net multithreading design-patterns .net-4.0