我设计了一个类MemoryBlock
。就像名字所说的那样,它是一块(非托管)内存。我只是这样做var x = new MemoryBlock (1024, 16)
,它给了我 1kB 的内存(也对齐到 16 个字节)。所以现在一些线程想要使用不安全的上下文读/写这个块。我做了类似SyncRoot
属性的事情来同步线程。所以我lock (myMemoryBlock.SyncRoot)
用记忆做一些事情。我不知道它好不好,但我在收藏中看到了这样的东西。
这种简单的机制不允许多个线程访问该对象。写作可以,但阅读不够。我想要这样的东西:
1)如果线程正在写入对象,则没有其他线程可以访问该对象
2)如果线程正在从对象读取,许多其他线程可以从该对象读取,但不能写入它
3)如果使用对象并且线程要写入, 线程等待直到对象空闲
4) 专家模式:如果一些线程正在读取对象,而另一个线程想要写入它,它会等待直到对象空闲但也告诉对象停止允许访问要读取的新线程从这个对象(队列)。
我会很高兴得到简单的提示,不需要代码。