My Project
Loading...
Searching...
No Matches
vspace::internals::FastLock Class Reference

#include <vspace.h>

Public Member Functions

 FastLock (vaddr_t offset=0)
 
void lock ()
 
void unlock ()
 

Private Attributes

vaddr_t _offset
 

Detailed Description

Definition at line 1431 of file vspace.h.

Constructor & Destructor Documentation

◆ FastLock()

vspace::internals::FastLock::FastLock ( vaddr_t offset = 0)
inline

Definition at line 1445 of file vspace.h.

1445 : _offset(offset) {
1446 }
STATIC_VAR int offset
Definition janet.cc:29

Member Function Documentation

◆ lock()

void vspace::internals::FastLock::lock ( )

Definition at line 727 of file vspace.cc.

727 {
728#ifdef HAVE_CPP_THREADS
729 while (_lock.test_and_set()) {
730 }
731 bool empty = _owner < 0;
732 if (empty) {
734 } else {
735 int p = vmem.current_process;
736 vmem.metapage->process_info[p].next = -1;
737 if (_head < 0)
738 _head = p;
739 else
740 vmem.metapage->process_info[_tail].next = p;
741 _tail = p;
742 }
743 _lock.clear();
744 if (!empty)
745 wait_signal(false);
746#else
748#endif
749}
int p
Definition cfModGcd.cc:4086
void lock_file(int fd, size_t offset, size_t len)
Definition vspace.cc:913
ipc_signal_t wait_signal(bool lock)
Definition vspace.cc:1075
static VMem & vmem
Definition vspace.h:1635
ProcessInfo process_info[MAX_PROCESS]
Definition vspace.h:1513

◆ unlock()

void vspace::internals::FastLock::unlock ( )

Definition at line 751 of file vspace.cc.

751 {
752#ifdef HAVE_CPP_THREADS
753 while (_lock.test_and_set()) {
754 }
755 _owner = _head;
756 if (_owner >= 0)
757 _head = vmem.metapage->process_info[_head].next;
758 _lock.clear();
759 if (_owner >= 0)
760 send_signal(_owner, 0, false);
761#else
763#endif
764}
void unlock_file(int fd, size_t offset, size_t len)
Definition vspace.cc:919
bool send_signal(int processno, ipc_signal_t sig, bool lock)
Definition vspace.cc:967

Field Documentation

◆ _offset

vaddr_t vspace::internals::FastLock::_offset
private

Definition at line 1437 of file vspace.h.


The documentation for this class was generated from the following files: