35得票2回答
比较并交换与测试并设置的区别

有人能解释一下多线程中上述操作的工作原理和区别吗?

8得票2回答
在PRAM模型中,CRCW和EREW有什么主要区别?

在PRAM模型中,多个处理器同时执行相同命令来处理不同数据集合。 每个算法有两种读/写模式: 1.并发(并发读和并发写) 2.独占(独占读和独占写) 我发现难以理解的是这两种模式之间到底有何区别,哪一种更有效?

10得票2回答
Volatile.Read / Volatile.Write 对于 "double" 类型的变量是原子操作吗?

MSDN指出: 对于其他类型的读写操作,包括long、ulong、double和decimal,以及用户定义的类型,不一定是原子操作。 C# 7.0草案规范 - 变量 - 9.6 变量引用的原子性 Volatile.Write(Double, Double)能作为原子操作吗?如果可以...

112得票4回答
在发布模式下程序卡住了,但在调试模式下正常运行。

下面的代码在调试模式下按预期工作,完成后等待500毫秒,但在发布模式下无限期挂起: public static void Main(string[] args) { bool isComplete = false; var t = new Thread(...

15得票3回答
ReleaseMutex:从未同步的代码块中调用了对象同步方法

我有这样一段非常简单的代码,很少会在调用ReleaseMutex()时抛出"System.ApplicationException: Object synchronization method was called from an unsynchronized block of code."。...

47得票3回答
两个线程同时执行同步块

以下是代码,其中一个Thread进入同步块,等待5秒钟,然后退出。我同时启动了两个Thread实例。 预期的结果是其中一个线程将拥有同步对象的锁定,另一个将等待。 5秒钟后,当锁定所有者退出时,等待线程将执行。 但是,实际上,两个线程都在同时执行同步块,并且同时退出。 预期输出: ...

46得票5回答
在使用双重锁定时,将单例实例设为volatile有什么意义?

private volatile static Singleton uniqueInstance 在单例模式中,使用双重锁定方法进行同步时,为什么需要将单个实例声明为volatile?如果不声明为volatile是否可以实现相同的功能?

17得票2回答
Volatile.Read/Write的理解

我正在尝试理解C#中的Volatile类。 据我的阅读: Volatile.Write方法在调用点强制将位置上的值写入。此外,任何早期程序顺序的加载和存储都必须发生在对Volatile.Write的调用之前。 Volatile.Read方法在调用点强制从位置中读取值。此外,任何较晚的程序...

20得票3回答
一个可观察对象的同步机制

假设我们需要同步访问共享资源的读写操作。多个线程将同时对其进行读写访问(大部分情况下为读取,有时为写入)。假设每次写入都会触发读取操作(该对象是可观察对象)。 针对这个例子,我将想象一个类,如下所示(原谅语法和风格,仅供说明用途): class Container { public...

9得票1回答
考虑到GIL,asyncio如何可能不是线程安全的?

asyncio 文档 中提到: 大多数 asyncio 对象不是线程安全的。只有在访问事件循环外的对象时才需要担心。 能否有人解释一下这句话,或者举个例子说明误用 asyncio 如何导致在线程间共享的对象上进行不同步的写入?我认为 GIL 意味着一次只有一个线程可以运行解释器,因此发...