Difference between revisions of "Sead/Locks"

From Deep Sea Knowledge
Jump to navigation Jump to search
(Add SpinLock documentation)
m (fix spacing)
Line 40: Line 40:
 
{
 
{
 
public:
 
public:
                // default constructor, sets all members to 0
+
        // default constructor, sets all members to 0
 
SpinLock();
 
SpinLock();
                // destructor
+
        // destructor
 
~SpinLock();
 
~SpinLock();
 
 
                // locks the iteration
+
        // locks the iteration
 
void lock();
 
void lock();
                // attempts to lock the iteration. True if successful, False if failure
+
        // attempts to lock the iteration. True if successful, False if failure
 
bool tryLock();
 
bool tryLock();
                // unlock the iteration
+
        // unlock the iteration
 
void unlock();
 
void unlock();
 
 

Revision as of 23:54, 27 December 2018

Lock classes that are contained in the sead namespace are classified as classes that pertain to locking regions of memory or data to prevent accidental mishandling.

CriticalSection

CriticalSection is a class that contains a region of code that is protected to ensure that it is executed on one thread at a time. To perform this, the class stores a mutex semaphore. It inherits from the IDisposer class.

namespace sead
{
    class CriticalSection : sead::IDisposer
    {
    public:
        // default constructor. Initializes the stored mutex type.
        CriticalSection();
        // constructor that initializes the section disposer with a heap and initializes the stored mutex type.
        CriticalSection(sead::Heap *);
        // constructor that initializes the section disposer with a heap and a null option, and initializes the mutex type.
        CriticalSection(sead::Heap *, sead::IDisposer::HeapNullOption);
        // destructor
        ~CriticalSection();

        // locks the section
        void lock();
        // attempts to lock the section, True is successful, False if failure
        bool tryLock();
        // unlock the section
        void unlock();

        nn::os::MutexType* mMutexType; // _20
    };
};

SpinLock

The SpinLock class is responsible for making threads that wish to acquire a lock be stuck in a loop until the lock is available, as it checks every iteration as it waits.

namespace sead
{
	class SpinLock
	{
	public:
        // default constructor, sets all members to 0
		SpinLock();
        // destructor
		~SpinLock();
		
        // locks the iteration
		void lock();
        // attempts to lock the iteration. True if successful, False if failure
		bool tryLock();
        // unlock the iteration
		void unlock();
		
		u64 mDest; // _0
		u32 mNumber; // _8
	};
};