线程的message queue在这个简略多线程环境下是安全的吗

线程的message queue在这个简单多线程环境下是安全的吗
很简单,console;
主线程创建子线程;
主线程中包含GetMessage()用来接收子线程Post来的消息;
子线程调用PostThreadMessage()向主线程发送消息。

我想请问的是,主线程和子线程中,需要类似Mutex的功能吗?
GetMessage()和PostThreadMessage()都会涉及读写主线程的message queue。
那么这两个函数在多线程环境下使用是安全的嘛?
------解决方案--------------------
安全的意思是?
Post消息是异步的,不保证主线程接收到消息的顺序是你post消息的顺序。其次说道消息队列,如果你post消息过快,消息队列满了后,你之后post的消息就会丢掉。于是从这个角度看是不“安全”的。
------解决方案--------------------
LZ不必担心这个
MS设计这个消息队列,其一就是用来 内核 - 用户 - 窗口 交互
能跨进程使用,其是线程安全的

------解决方案--------------------
引用:
我所指的“安全”是指并发安全。
比如说当有多个子线程向主线程post时,每条消息在被写入主线程message queue时,是安全的嘛?(假设不存在队列满或者消息顺序错乱的问题)

一般来说是安全的,除了一些特殊的消息,比如优先级比较低的消息,WM_PAINT/WM_TIMER之类的,一般都先处理高优先级的消息,如果没有高优先级的消息才会去处理它们。
------解决方案--------------------
我想请问的是,主线程和子线程中,需要类似Mutex的功能吗?
GetMessage()和PostThreadMessage()都会涉及读写主线程的message queue。
那么这两个函数在多线程环境下使用是安全的嘛?

不需要的,至少用户级别不需要关心,微软都已经封装好了。

可能会不安全的,看你怎么操作了,经常有人喜欢把主进程的参数传入子线程处理。
操作不当会有问题。非托管的优势,也是略势。