Handout
This commit is contained in:
44
kernel/sync/message.h
Normal file
44
kernel/sync/message.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
#include "../object/queue.h"
|
||||
#include "../types.h"
|
||||
|
||||
struct Message {
|
||||
const size_t pid; ///< Sender Thread ID of message
|
||||
|
||||
const uintptr_t sbuffer; ///< Send buffer
|
||||
const size_t ssize; ///< Send buffer size
|
||||
|
||||
const uintptr_t rbuffer; ///< Receive buffer
|
||||
const size_t rsize; ///< Receive buffer size
|
||||
|
||||
Message *queue_link = nullptr; ///< Next message in the message queue
|
||||
|
||||
/*! \brief Constructor
|
||||
* \param pid Sender Thread ID of message
|
||||
* \param sbuffer Send buffer
|
||||
* \param ssize Send buffer size
|
||||
* \param rbuffer Receive buffer
|
||||
* \param rsize Receive buffer size
|
||||
*/
|
||||
explicit Message(int pid, uintptr_t sbuffer = 0, size_t ssize = 0,
|
||||
uintptr_t rbuffer = 0, size_t rsize = 0)
|
||||
: pid(pid),
|
||||
sbuffer(sbuffer),
|
||||
ssize(ssize),
|
||||
rbuffer(rbuffer),
|
||||
rsize(rsize) {}
|
||||
|
||||
/*! \brief Helper to retrieve (and remove) a message from the queue
|
||||
* \param pid Thread id of message
|
||||
* \param queue Queue with message
|
||||
* \return Pointer to message or nullptr
|
||||
*/
|
||||
static Message *dequeueByPID(size_t pid, Queue<Message> &queue) {
|
||||
for (Message *m : queue) {
|
||||
if (m->pid == pid) {
|
||||
return queue.remove(m);
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user