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