【发布时间】:2013-04-17 01:15:23
【问题描述】:
我正在编写一个带有两个线程的 C++ 应用程序。线程 A 将向线程 B 发送消息。消息类型可以是:
struct MyMessageType
{
int a;
enum MyEnum b;
bool someFlag;
}
std::queue<MyMessageType> messageQueue 在线程之间共享用于传递消息。
在发送线程中,我会有类似的东西:
struct MyMessageType newMessage;
newMessage.a = 14;
newMessage.b = someEnumeratedValue;
newMessage.someFlag = false;
GrabTheMutexProtectingTheQueue();
messageQueue.push(newMessage);
ReleaseTheMutexProtectingTheQueue();
我的问题是关于内存管理的,有两个方面:
A) 如何确保接收线程收到消息时指向newMessage 的指针有效?例如,如果创建newMessage 的函数结束并且newMessage 因此在接收线程处理消息之前超出范围会发生什么?
B) 一旦我可以确保newMessage 指针在接收线程处理它时有效,我如何释放结构使用的内存?
【问题讨论】:
-
C 中没有
std::queue。也许你的意思是 C++?
标签: c++ multithreading memory-management