将代码指定为关键部分的因素
据我了解,process synchronization
使用诸如semaphores
之类的内核数据结构使用,以防止同时访问代码的critical section
。一般而言,我认为定义为"关键部分"是可以访问共享数据(或)共享资源的代码部分。所以问题是:
- 共享数据是一个用户空间实体。因此,用户流程有责任确保其访问的一致性。
- 我认为,通过多个流程对资源的并发访问是内核应注意的。那里需要哪种用户级别同步?
- 确定用户空间程序中的代码是关键部分的因素是什么?
您正在将"内核空间/用户空间"与"关键部分"混合。
内核/用户空间仅定义一个过程具有哪种特权。如果线程在用户空间中执行,则无法直接访问物理内存。它必须通过内核的虚拟内存管理。
另一方面,关键部分是代码的一部分,如果两个过程并行执行,则可能导致数据损坏。由于代码正在访问某些共享资源。
,这将发生。
这两个概念是独立的。关键部分可以在用户空间或内核空间中。需要某种同步,以避免共享资源的损坏。即使在两个过程/线程以内核模式运行并想要访问共享资源的情况下,他们也需要应用某种同步机制(Spinlocks或Mutex)。
我希望这解释有帮助。
可以通过命名同步对象实现过程间同步。WINDWS同步函数提供了名为sutexes和命名信号量的函数。请参阅此答案。
例如,许多过程的共享资源可能是共享内存。
使用 critical section
术语在问题中完成的方法有些误导,因为有关键的部分对象(Windows)用于线程同步。
我怀疑您的意思是更一般,因为您也明确记录了过程。
但是,任何共享资源,无论是共享内存还是任何其他对象,都应受到处理时的同时访问。