Quero compartilhar uma estrutura de dados de um thread para dois outros threads com a API Win32 PostThreadMessage()
usando uma MSG
estrutura. Só quero saber se o uso de mensagens de thread na fila é serializado?
Eu tento:
PostThreadMessage(thReceiver_A_Id, (int)ct + 100, (WPARAM)&generic_data, NULL);
PostThreadMessage(thReceiver_B_Id, (int)ct + 100, (WPARAM)&generic_data, NULL);
e espere acesso serializado no lado do receptor:
MSG msg;
GetMessage(&msg, NULL, NULL, 0)
Dois threads de recebimento separados executarão dois loops de mensagens independentes em paralelo. Em geral, eles não serão serializados entre si.
Se eles estiverem apenas lendo seus dados na fila, isso funcionará perfeitamente, desde que o thread de envio não modifique o conteúdo desses dados de forma alguma. Caso contrário, você terá que fornecer sua própria serialização aos dados, como uma seção crítica ou mutex.
Além disso, lembre-se de que
PostThreadMessage()
é assíncrono , portanto, ele retornará ao thread de chamada assim que a mensagem for colocada na fila. Como você está passando um ponteiro parageneric_data
, você precisa ter certeza de quegeneric_data
ele permanecerá ativo na memória até que ambos os threads de recebimento terminem de processar as mensagens na fila, caso contrário, você corre o risco de invalidar os ponteiros.