操作系统主要是运行进程和应用程序来共享系统的资源。这些资源可以是CPU、RAM、网络连接等。互斥对象也称为Mutex是一个程序对象,它允许和管理多个进程和应用程序同时共享这些系统资源。
null
示例案例
日志文件用于存储有关服务、程序和应用程序创建的事件的信息。单个日志文件可以由多个程序填充。如果在同一时间两个程序试图访问日志文件,并添加一些事件,这将创建一个共谋。应该对此进行管理,并且作为资源的日志文件应该在这些程序之间共享。不同的编程语言有不同的库来创建互斥。
当互斥是有用的
以下情况下互斥是有用的。
- 通过多个进程写入单个文件。
- 读写数据到网络资源,如网络接口
- Web服务器线程写入文件
临界截面
共享资源区域命名为 Critical Section
. 关键部分可以由多个线程或应用程序访问。我们可以锁定关键部分,以防任何线程或应用程序访问它。在源代码使用完成后,我们可以解锁关键部分。
竞赛条件
我们在上一部分学习了临界部分。如果两个进程线程尝试在同一时间访问同一资源,并尝试在同一时间更改,这将创建 Race Condition
. 两个或多个进程线程将创建访问同一资源的竞争。
C#互斥示例
在本部分中,我们将介绍一个C#程序,它使用互斥命令通过锁定对象来管理对象访问。
private static readonly Object instanceLock = new Object();private static MySingleton instance;public static MySingleton Instance{ lock(instanceLock) { if(instance == null) { instance = new MySingleton(); } return instance; }}
Java互斥示例
这是一个Java互斥examaple。
try { mutex.acquire(); try { // do something } finally { mutex.release(); }} catch(InterruptedException ie) { // ...}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END