首页 文章

win32句柄和多线程

提问于
浏览
2

在我们的应用程序中,使用CreateEvent,SetEvent / ResetEvent大量使用win32 HANDLE,以便执行同步机制 .

我的一位同事告诉我,访问HANDLEs事件是否是线程安全的 .

我无法回答,因为HANDLEs对任何GDI对象都不是线程安全的......

但由于事件的目标是多线程同步,我无法想象它们不是线程安全的 .

你能证实一下吗?

2 回答

  • 2

    您从Kernel32中的函数获得的所有句柄都是线程安全的,除非该函数的MSDN Library文章明确提到它不是 . 从代码中可以很容易地判断,这样的句柄是用CloseHandle()关闭的 .

    使用句柄执行的操作可能不一定是线程安全的,当您调用SetEvent()两次但WaitForSingleObject()只调用一次时,Windows将无法帮助您 . 这可能是您程序中的线程竞争,具体取决于您如何使用该事件 .

  • 1

    取决于手柄的类型 .

    根据定义,同步句柄(类似于CreateEvent创建的句柄)是线程安全的 . 文件句柄,当由多个线程同时写入时,不是那么多 .

相关问题