我正在用兩個線程編寫一個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++? – paxdiablo