多线程同步机制包括哪些什么是多线程同步机制,多线程同步机制包括:1。临界段用于实现“独占占有”;2.信号量用于跟踪有限的资源;3.互斥是核心对象,可以实现不同线程之间的“独占占有”;4.事件通常用于设计一些自定义的同步对象。
操作环境:Windows7系统,戴尔G3电脑。
多线程同步机制包括:
1、关键部分
临界段用来实现“独占占有”。应用范围在单个进程的线程之间。它是:
局部对象,不是核心对象。
快速高效。
不能有多个关键部分同时等待。
无法检测它是否已被线程放弃。
可以实现线程间互斥,但不能用来实现同步。
2、信号量
信号量用于跟踪有限的资源。它是:
核心对象。
没有主人。
可以命名,所以可以被其他进程打开。
它可以被任何线程释放。
既能实现线程间的互斥,又能实现线程间的同步。
跨进程使用时,如果拥有信号量的线程意外结束,则不会通知其他进程。
3、互斥
互斥是一个核心对象,可以实现不同线程之间的“独占占有”,即使那些线程属于不同的进程。它是:
核心对象。
如果拥有互斥体的线程结束,将会产生一个“已放弃”的错误消息。
我可以被命名,所以它可以被其他进程打开。
只能由拥有它的线程释放。
当跨进程使用时,如果带有互斥体的进程意外结束,其他进程将收到WAIT _ ABANDOEND消息。
4、事件
事件对象通常用于重叠输入/输出,或者设计一些自定义同步对象。它是:
核心对象。
但是用来实现线程的互斥和同步。
可以命名,所以可以被其他进程打开。
当跨进程使用时,如果拥有信号量的线程意外结束,则不会通知其他进程。
注意:临界区和互斥体都有“线程所有权”的概念,所以不能用来实现线程间的同步,只能用来实现互斥。原因是创建临界段或互斥体的线程可以无条件进入被保护程序段,而不需要等待LeaveCriticalSection(),因为它有这个权限。此外,互斥体可以很好地处理放弃操作。如果线程在没有释放对象的情况下意外终止,其他线程可以等待WAIT _ ADOPTED _ 0。但是无论是事件还是信号量都做不到。
事件和信号量可以实现线程和进程之间的互斥和同步。
就使用效率而言,关键区域的效率最高,因为它不是内核对象,而其他三个都是核心对象,需要通过操作系统来实现,效率相对较低。
但是如果你想跨进程使用它,你仍然需要互斥体、事件对象和信号量。
总之:设计的时候,一开始尽量不要用全局变量,如果不行,考虑用Inter.首先是()函数,然后是临界区对象,最后是事件、互斥体和信号量。以上是多线程同步机制的详细内容。请多关注其他关于Lei.com PHP知识的相关文章!