added spinlock
This commit is contained in:
2
main.cc
2
main.cc
@@ -115,7 +115,7 @@ extern "C" int main_ap() {
|
|||||||
DBG << "test\n" << flush;
|
DBG << "test\n" << flush;
|
||||||
DBG << static_cast<int>(LAPIC::getID()) << endl << flush;
|
DBG << static_cast<int>(LAPIC::getID()) << endl << flush;
|
||||||
|
|
||||||
assert(Core::getID() != 1);
|
//assert(Core::getID() != 1);
|
||||||
Application{}.action();
|
Application{}.action();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -35,14 +35,15 @@ class Spinlock {
|
|||||||
// Prevent copies and assignments
|
// Prevent copies and assignments
|
||||||
Spinlock(const Spinlock& copy) = delete;
|
Spinlock(const Spinlock& copy) = delete;
|
||||||
Spinlock& operator=(const Spinlock&) = delete;
|
Spinlock& operator=(const Spinlock&) = delete;
|
||||||
|
private:
|
||||||
|
volatile uint64_t locked;
|
||||||
public:
|
public:
|
||||||
/*! \brief Constructor; Initializes as unlocked.
|
/*! \brief Constructor; Initializes as unlocked.
|
||||||
*
|
*
|
||||||
* \todo(12) Complete Constructor (for \MPStuBS, or use \ref Ticketlock)
|
* \todo(12) Complete Constructor (for \MPStuBS, or use \ref Ticketlock)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
consteval Spinlock() {}
|
consteval Spinlock() : locked(0) {}
|
||||||
|
|
||||||
/*! \brief Enters the critical area. In case the area is already locked,
|
/*! \brief Enters the critical area. In case the area is already locked,
|
||||||
* \ref lock() will actively wait until the area can be entered.
|
* \ref lock() will actively wait until the area can be entered.
|
||||||
@@ -50,11 +51,11 @@ class Spinlock {
|
|||||||
* \see \ref Core::pause()
|
* \see \ref Core::pause()
|
||||||
* \todo(12) Implement Method (for \MPStuBS, or use \ref Ticketlock)
|
* \todo(12) Implement Method (for \MPStuBS, or use \ref Ticketlock)
|
||||||
*/
|
*/
|
||||||
void lock() {}
|
void lock();
|
||||||
|
|
||||||
/*! \brief Unblocks the critical area.
|
/*! \brief Unblocks the critical area.
|
||||||
*
|
*
|
||||||
* \todo(12) Implement Method (for \MPStuBS, or use \ref Ticketlock)
|
* \todo(12) Implement Method (for \MPStuBS, or use \ref Ticketlock)
|
||||||
*/
|
*/
|
||||||
void unlock() {}
|
void unlock();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user