线程同步与异步套接 字编程 主讲人:孙鑫 http://www.sunxin.org
线程同步与异步套接 字编程 主讲人:孙鑫 http://www.sunxin.org
事件对象 事件对象也属于内核对象,包含一个使用计数, 个用于指明该事件是一个自动重置的事件还是 个人工重置的事件的布尔值,另一个用于指明 该事件处于已通知状态还是未通知状态的布尔值 ■有两种不同类型的事件对象。一种是人工重置的 事件,另一种是自动重置的事件。当人工重置的 事件得到通知时,等待该事件的所有线程均变为 可调度线程 个自动重置的事件得到通知时 等待该事件的线程中只有一个线程变为可调度线 程 http://www.sunxin.org
事件对象 ◼ 事件对象也属于内核对象,包含一个使用计数, 一个用于指明该事件是一个自动重置的事件还是 一个人工重置的事件的布尔值,另一个用于指明 该事件处于已通知状态还是未通知状态的布尔值。 ◼ 有两种不同类型的事件对象。一种是人工重置的 事件,另一种是自动重置的事件。当人工重置的 事件得到通知时,等待该事件的所有线程均变为 可调度线程。当一个自动重置的事件得到通知时, 等待该事件的线程中只有一个线程变为可调度线 程。 http://www.sunxin.org
关键代码段 ■关键代码段临界区)工作在用户方式下 关键代码段(临界区)是指一个小代码段,在 代码能够执行前,它必须独占对某些资源 的访问权。 http://www.sunxin.org
关键代码段 ◼ 关键代码段(临界区)工作在用户方式下。 ◼ 关键代码段(临界区)是指一个小代码段,在 代码能够执行前,它必须独占对某些资源 的访问权。 http://www.sunxin.org
线程死锁 ■哲学家进餐的问题 ■线程1拥有了临界区对象A,等待临界区对 象B的拥有权,线程2拥有了临界区对象B 等待临界区对象A的拥有权,就造成了死锁。 http://www.sunxin.org
线程死锁 ◼ 哲学家进餐的问题 ◼ 线程1拥有了临界区对象A,等待临界区对 象B的拥有权,线程2拥有了临界区对象B, 等待临界区对象A的拥有权,就造成了死锁。 http://www.sunxin.org
互斥对象、事件对象与关键代码段 的比较 ■互斥对象和事件对象属于内核对象,利用 内核对象进行线程同步,速度较慢,但利 用互斥对象和事件对象这样的内核对象, 可以在多个进程中的各个线程间进行同步 ■关键代码段是工作在用户方式下,同步速 度较快,但在使用关键代码段时,很容易 进入死锁状态,因为在等待进入关键代码 段时无法设定超时值 http://www.sunxin.org
互斥对象、事件对象与关键代码段 的比较 ◼ 互斥对象和事件对象属于内核对象,利用 内核对象进行线程同步,速度较慢,但利 用互斥对象和事件对象这样的内核对象, 可以在多个进程中的各个线程间进行同步。 ◼ 关键代码段是工作在用户方式下,同步速 度较快,但在使用关键代码段时,很容易 进入死锁状态,因为在等待进入关键代码 段时无法设定超时值。 http://www.sunxin.org