b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Windows线程同步和互斥技术概述...(2)

电脑杂谈  发布时间:2020-03-21 06:18:35  来源:网络整理

2. 手动重置: 通常,所有等待此信号的线程都将唤醒. 内核对象将一直保持信号状态,直到您调用相关函数以将内核对象置于非信号状态为止.

2.1讨论和实验1: 当内核对象处于非信号状态时,相关线程结束时,系统会将内核对象重置为信号站吗?

互斥锁由线程拥有. 如果线程退出而没有释放相应的互斥锁,则操作系统将调用ReleaseMutex释放相应的互斥锁. 信号量和事件呢?如果未正确释放或重置该互斥锁,操作系统在该过程结束后是否尝试释放互斥锁? -如果没有,那么在操作系统的此操作过程中,始终会存在未正确释放的信号和事件,对吗? : 例如,如果某个进程使用事件来完成唯一实例,则该进程退出后未正确释放相应的事件,则该进程将在系统重新启动之前运行. 是吗?

windows 线程同步_windows 线程数量限制_windows查询线程状态

请注意,对于内核对象,如果其引用计数变为0,则该内核对象将被销毁. 为了进行比较,我使用Event和Mutex构建了几个应用程序. (请注意,互斥锁属于线程,但是此处的应用程序是单线程的. 换句话说,此处没有测试表明进程中具有互斥锁的线程不释放互斥锁就退出!)

有四个使用事件的应用程序. 创建事件后,该事件将设置为手动重置事件. 初始状态是信号状态. 换句话说,它是通过:: CreateEvent(NULL,TRUE,TRUE,“ KernelObjectsEvent”)方法创建的. 另外,WaitForSingleObject(内核对象句柄,0)等待名为“ KernelObjectsEvent”的事件对象.

1. Event_OnlyReferences〜只需尝试使用CreateEvent获取事件句柄,不要等待该事件,并且不要更改其任何状态.

2. Event_AfterWaitnonSignaled〜以相同的方式调用CreateEvent,然后等待,并在成功后设置为无信号状态. 该应用程序继续运行.

3. Event_setEventBeforeWaitAfternonSignaled〜以相同的方式调用CreateEvent,但是等待事件前作为信号站,然后等待,并在成功后将其设置为无信号状态.

4. Event_setEventBeforeWaitAfterSignaled〜以相同的方式调用CreateEvent,但是要等待事件前的信号站,然后等待,并在成功后将其设置为信号状态.

有四个使用Mutex的应用程序. 互斥锁在创建时被创建为非进程拥有的,换句话说,它是使用CreateMutex(NULL,FALSE,“ KernelObjectsMutex”)创建的. 另外,带有WaitForSingleObject(内核对象句柄,0)的名为“ KernelObjectsMutex”的Waitex对象

1. Mutex_OnlyReferences-只需尝试使用CreateMutex获取Mutex句柄,不要等待Mutex,也不要尝试释放它.

2. Mutex_AfternonSignaled〜以相同的方式调用CreateMutex,然后等待. 成功后,请勿尝试释放它. 该应用程序继续运行.

3. Mutex_ReleaseBeforeWaitAfternonSignaled〜以相同的方式调用CreateMutex,但是尝试多次调用ReleaseMutex,然后再等待释放它,然后等待,成功后,不要尝试释放它.

4. Mutex_ReleaseBeforeWaitAfterSignaled〜以相同的方式调用CreateMutex,但尝试多次调用ReleaseMutex,然后再等待释放它,然后等待,成功后再释放它.

1. Event_OnlyReferences ...成功运行,请不要终止程序.

2. 第一次运行Event_AfterWaitnonSignaled ...成功运行,请不要终止程序.

3. 第二次运行Event_AfterWaitnonSignaled ...操作失败,程序退出.

4. Event_setEventBeforeWaitAfternonSignaled ...成功运行,请不要终止程序.

5. 第三次运行Event_AfterWaitnonSignaled ...操作失败,程序退出.

6. Event_setEventBeforeWaitAfterSignaled ...成功运行,请不要终止程序.

7. 第四次运行Event_AfterWaitnonSignaled ...成功运行,请不要终止程序.

1. Mutex_OnlyReferences ...成功运行,请不要终止程序.

2. 第一次运行Mutex_AfternonSignaled ...成功运行,请不要终止程序.

3. 再次运行Mutex_AfternonSignaled ...操作失败,程序退出.

4. Mutex_ReleaseBeforeWaitAfternonSignaled ...操作失败,程序退出.

5. 第三次运行Mutex_AfternonSignaled ...操作失败,程序退出.

windows 线程同步_windows查询线程状态_windows 线程数量限制

6. Mutex_ReleaseBeforeWaitAfterSignaled ...操作失败,程序退出.

7. 第三次运行Mutex_AfternonSignaled ...操作失败,程序退出.

1. 只有当前拥有Mutex的线程才调用ReleaseMutex函数以返回TRUE并释放Mutex;否则,它将释放该Mutex. 不拥有Mutex的线程调用ReleaseMutex函数以简单地返回FALSE.

2. 互斥锁不属于某个线程. 它属于操作系统. 您可以调用SetEvent或ResetEvent更改其状态,而不管当前事件是否有信号. 换句话说,如果您未能按照应用程序中任何位置的规则调用SetEvent或ResetEvent,则将无法实现同步或互斥的目的.

3. [注意: 一般而言,事件用于同步,而不是让我们在此处实现互斥;互斥的与线程无关的内核对象应为Semaphore;与线程相关的内核对象应该是Mutex. )

1. 运行Event_OnlyReferences ...成功运行,请不要终止程序.

2. 第一次运行Event_AfterWaitnonSignaled ...成功运行,请不要终止程序.

3. 运行Event_setEventBeforeWaitAfternonSignaled ...成功运行,请不要终止程序.

4. 关闭除首次运行Mutex_OnlyReferences之外的所有其他应用程序.

5. 第二次运行Event_AfterWaitnonSignaled ...操作失败,程序退出.

6. 运行Event_setEventBeforeWaitAfterSignaled ...如果成功运行,请不要终止程序.

7. 关闭除首先运行的Event_OnlyReferences之外的所有其他程序.

8. 第三次运行Event_AfterWaitnonSignaled程序...成功运行,请不要终止该程序.

1. 运行Mutex_OnlyReferences ...成功运行,请不要终止程序.

2. 第一次运行Mutex_AfternonSignaled ...成功运行,请不要终止程序.

3. 运行Mutex_ReleaseBeforeWaitAfternonSignaled ...操作失败,程序退出.

4. 关闭除首次运行Mutex_OnlyReferences之外的所有其他应用程序.

5. 第二次运行Mutex_AfternonSignaled ...捕获WAIT_ABANDONED信号. 在这里,我们让程序继续运行. 不要中止程序.

6. 运行Mutex_ReleaseBeforeWaitAfterSignaled ...操作失败,程序退出.

7. 关闭除首次运行的Mutex_OnlyReferences之外的所有其他应用程序.

8. 第三次运行Mutex_AfternonSignaled ...成功运行,请不要终止程序.

1. 当事件处于非信号状态时,相关线程或进程将退出,并且系统将不会尝试为您将其设置为信号状态-因此,事件实验中的步骤5无法成功运行. 但是由于它(这里是内核对象,而不是内核对象的句柄)不属于任何进程或线程,因此您可以将其重新设置为任何其他程序中的信号阶段,因此步骤6的执行是成功.

2. 当Mutex处于非信号状态时,当前拥有它的线程或进程将退出,并且系统将尝试将其设置为已信号状态-因此Mutex实验中的步骤5成功运行,但是捕获了WAIT_ABANDONED信号,它指示操作系统将您重置为已发出信号的状态. 同样,由于线程现在拥有它,因此当它尚未释放互斥锁且该线程尚未退出时,它就属于该线程,并且您无法剥夺其权限,因此第6步将无法运行.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-146872-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...